我觉得很傻,因为这是一件很简单的事情,但我还没有在这里或其他任何地方找到答案。
是否没有直接的方法将numpy数组与另一个数组索引?
说我有一个2D数组
>> A = np.asarray([[1, 2], [3, 4], [5, 6], [7, 8]])
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
如果我想访问元素[3,1]我输入
>> A[3,1]
8
现在,假设我将此索引存储在数组
中>> ind = np.array([3,1])
这次尝试使用索引:
>> A[ind]
array([[7, 8],
[3, 4]])
结果不是A [3,1]
问题是:拥有数组A和ind,获得A [3,1]的最简单方法是什么?
答案 0 :(得分:4)
这是因为通过给出一个数组,你实际上要求
A[[3,1]]
它给出了第二个数组的第三个和第一个索引,而不是数组的第三个索引的第一个索引。
您可以使用
A[ind[0],ind[1]]
您也可以使用(如果您想要同时使用更多索引);
A[indx,indy]
其中indx
和indy
是第一维和第二维的索引数组。
请参阅此处了解numpy数组的所有可能的索引方法:http://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html
答案 1 :(得分:4)
只需使用元组:
>>> A[(3, 1)]
8
>>> A[tuple(ind)]
8
A[]
实际上调用特殊方法__getitem__
:
>>> A.__getitem__((3, 1))
8
并使用逗号创建一个元组:
>>> 3, 1
(3, 1)
将这两个基本的Python原则放在一起可以解决您的问题。
如果你不需要NumPy数组功能,你可以将索引存储在一个元组中。