整数索引
这种机制有助于根据数组的 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
它的输出如下 -
选择包括来自第一个数组的 (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 用于两者时,结果是相同的。但是高级索引会导致复制,并且可能具有不同的内存布局。
示例 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]]