我无法理解numpy中的整数数组索引。
>>> x = np.array([[1, 2], [3, 4], [5, 6]])
>>> x[[0, 1, 2], [0, 1, 0]]
array([1, 4, 5])
请解释一下我发生了什么?
答案 0 :(得分:1)
In [76]: x = np.array([[1, 2], [3, 4], [5, 6]])
In [77]: x
Out[77]:
array([[1, 2],
[3, 4],
[5, 6]])
由于第一个和第二个索引列表的大小匹配,因此它们的值会与x
中的选择元素配对。我将使用列表索引来说明它:
In [78]: x[[0, 1, 2], [0, 1, 0]]
Out[78]: array([1, 4, 5])
In [79]: list(zip([0, 1, 2], [0, 1, 0]))
Out[79]: [(0, 0), (1, 1), (2, 0)]
In [80]: [x[i,j] for i,j in zip([0, 1, 2], [0, 1, 0])]
Out[80]: [1, 4, 5]
或者更明确地说,它将x[0,0]
,x[1,1]
和x[2,0]
作为1d数组返回。另一种思考方式是你已经从3行(分别)中选择了[0,1,0]
元素。
答案 1 :(得分:0)
x[[0,1,2],[0,1,0]]
[0,1,2]
< - 在此指定您将使用的阵列
[0,1,0]
< - 在这里您可以选择每个指定数组中的元素
因此,数组0中的元素0,元素1形成arr 1,依此类推
答案 2 :(得分:0)
我发现最容易理解如下:
In [179]: x = np.array([[1, 2], [3, 4], [5, 6]])
In [180]: x
Out[180]:
array([[1, 2],
[3, 4],
[5, 6]])
假设我们要从此矩阵中选择1
,4
和5
。因此,第0行的第0列,第1行的第1列和第2行的第0列。现在为索引提供两个数组(矩阵的每个维度一个),在其中我们用行然后是我们感兴趣的列填充这些数组:
In [181]: rows = np.array([0, 1, 2])
In [182]: cols = np.array([0, 1, 0])
In [183]: x[rows, cols]
Out[183]: array([1, 4, 5])