我无法理解numpy中的整数数组索引。
>>> x = np.array([[1, 2], [3, 4], [5, 6]]) >>> x[[0, 1, 2], [0, 1, 0]] array([1, 4, 5])
请告诉我这是怎么回事?
wribegjk1#
x[[0,1,2],[0,1,0]]
[0,1,2]〈-在这里指定要使用的数组[0,1,0]〈-在这里从每个指定的数组中选择元素所以元素0来自数组0,元素1来自数组1,以此类推
[0,1,2]
[0,1,0]
mfuanj7w2#
In [76]: x = np.array([[1, 2], [3, 4], [5, 6]]) In [77]: x Out[77]: array([[1, 2], [3, 4], [5, 6]])
因为第一个和第二个索引列表的大小匹配,所以它们的值被配对以从x中选择元素。我将用列表索引来说明:
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]元素。
x[0,0]
x[1,1]
x[2,0]
eufgjt7s3#
我觉得最容易理解的如下:
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列。现在为索引提供两个数组(矩阵的每个维度一个),我们用我们感兴趣的行和列填充这些数组:
1
4
5
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])
3条答案
按热度按时间wribegjk1#
[0,1,2]
〈-在这里指定要使用的数组[0,1,0]
〈-在这里从每个指定的数组中选择元素所以元素0来自数组0,元素1来自数组1,以此类推
mfuanj7w2#
因为第一个和第二个索引列表的大小匹配,所以它们的值被配对以从
x
中选择元素。我将用列表索引来说明:或者更明确地说,它返回
x[0,0]
,x[1,1]
和x[2,0]
,作为一个1d数组。另一种方式认为它是你从3行(分别)中选择了[0,1,0]
元素。eufgjt7s3#
我觉得最容易理解的如下:
假设我们想从这个矩阵中选择
1
,4
和5
。所以第0行的第0列,第1行的第1列和第2行的第0列。现在为索引提供两个数组(矩阵的每个维度一个),我们用我们感兴趣的行和列填充这些数组: