- NumPy环境安装配置
- NumPy Ndarray对象
- NumPy数据类型
- NumPy数组属性
- NumPy数组创建例程
- NumPy来自现有数据的数组
- NumPy来自数值范围的数组
- NumPy切片和索引
- NumPy高级索引
- NumPy广播
- NumPy在数组上的迭代
- NumPy数组操作
- NumPy位操作
- NumPy字符串函数
- NumPy数学算数函数
- NumPy算数运算
- NumPy统计函数
- NumPy排序、搜索和计数函数
- NumPy字节交换
- NumPy副本和视图
- NumPy矩阵库
- NumPy线性代数
- NumPy Matplotlib库
- NumPy使用 Matplotlib 绘制直方图
- NumPy IO文件操作
NumPy高级索引
NumPy - 高级索引
如果一个ndarray
是非元组序列,数据类型为整数或布尔值的ndarray
,或者至少一个元素为序列对象的元组,我们就能够用它来索引ndarray
。高级索引始终返回数据的副本。 与此相反,切片只提供了一个视图。
有两种类型的高级索引:整数和布尔值。
整数索引
这种机制有助于基于 N 维索引来获取数组中任意元素。 每个整数数组表示该维度的下标值。 当索引的元素个数就是目标ndarray
的维度时,会变得相当直接。
以下示例获取了ndarray
对象中每一行指定列的一个元素。 因此,行索引包含所有行号,列索引指定要选择的元素。
示例 1
import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) y = x[[0,1,2], [0,1,0]] print y
输出如下:
[1 4 5]
该结果包括数组中(0,0)
,(1,1)
和(2,0)
位置处的元素。
下面的示例获取了 4X3 数组中的每个角处的元素。 行索引是[0,0]
和[3,3]
,而列索引是[0,2]
和[0,2]
。
示例 2
import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print '我们的数组是:' print x print '\n' rows = np.array([[0,0],[3,3]]) cols = np.array([[0,2],[0,2]]) y = x[rows,cols] print '这个数组的每个角处的元素是:' print y
输出如下:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 这个数组的每个角处的元素是: [[ 0 2] [ 9 11]]
返回的结果是包含每个角元素的ndarray
对象。
高级和基本索引可以通过使用切片:
或省略号...
与索引数组组合。 以下示例使用slice
作为列索引和高级索引。 当切片用于两者时,结果是相同的。 但高级索引会导致复制,并且可能有不同的内存布局。
示例 3
import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print '我们的数组是:' print x print '\n' # 切片 z = x[1:4,1:3] print '切片之后,我们的数组变为:' print z print '\n' # 对列使用高级索引 y = x[1:4,[1,2]] print '对列使用高级索引来切片:' print y
输出如下:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 切片之后,我们的数组变为: [[ 4 5] [ 7 8] [10 11]] 对列使用高级索引来切片: [[ 4 5] [ 7 8] [10 11]]
布尔索引
当结果对象是布尔运算(例如比较运算符)的结果时,将使用此类型的高级索引。
示例 1
这个例子中,大于 5 的元素会作为布尔索引的结果返回。
import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print '我们的数组是:' print x print '\n' # 现在我们会打印出大于 5 的元素 print '大于 5 的元素是:' print x[x > 5]
输出如下:
我们的数组是: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] 大于 5 的元素是: [ 6 7 8 9 10 11]
示例 2
这个例子使用了~
(取补运算符)来过滤NaN
。
import numpy as np a = np.array([np.nan, 1,2,np.nan,3,4,5]) print a[~np.isnan(a)]
输出如下:
[ 1. 2. 3. 4. 5.]
示例 3
以下示例显示如何从数组中过滤掉非复数元素。
import numpy as np a = np.array([1, 2+6j, 5, 3.5+5j]) print a[np.iscomplex(a)]
输出如下:
[2.0+6.j 3.5+5.j]
上一篇:NumPy切片和索引
下一篇:NumPy广播
扫描二维码
程序员编程王