NumPy高级索引 NumPy索引和切片 NumPy广播 可以从ndarray中选择一个非元组序列,整数或布尔数据类型的ndarray对象,或者至少包含一个项目作为序列对象的元组。高级索引始终返回数据的副本。与此相反,切片只呈现一个视图。 有两种高级索引 - 整型 和 布尔型 。 整数索引 该机制有助于根据其无限维索引在数组中选择任意的项目。每个整数数组代表该维度中的索引数量。当索引由与目标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 'Our array is:' print x print '\n' rows = np.array([[0,0],[3,3]]) cols = np.array([[0,2],[0,2]]) y = x[rows,cols] print 'The corner elements of this array are:' print y 这个程序的输出如下 - Our array is: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] The corner elements of this array are: [[ 0 2] [ 9 11]] 最终的选择是包含角点元素的ndarray对象。 高级和基本索引可以通过使用一个slice(:)或省略号(...)与索引数组结合使用。以下示例对列使用slice和高级索引。当切片用于两者时结果相同。但高级索引会导致复制,并可能有不同的内存布局。 例3 import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print 'Our array is:' print x print '\n' # slicing z = x[1:4,1:3] print 'After slicing, our array becomes:' print z print '\n' # using advanced index for column y = x[1:4,[1,2]] print 'Slicing using advanced index for column:' print y 该计划的输出如下 - Our array is: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] After slicing, our array becomes: [[ 4 5] [ 7 8] [10 11]] Slicing using advanced index for column: [[ 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 'Our array is:' print x print '\n' # Now we will print the items greater than 5 print 'The items greater than 5 are:' print x[x > 5] 这个程序的输出将是 - Our array is: [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] The items greater than 5 are: [ 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广播