使用另一个数组

时间:2015-12-04 07:19:45

标签: python arrays numpy indexing

我觉得很傻,因为这是一件很简单的事情,但我还没有在这里或其他任何地方找到答案。

是否没有直接的方法将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]的最简单方法是什么?

2 个答案:

答案 0 :(得分:4)

这是因为通过给出一个数组,你实际上要求

A[[3,1]] 

它给出了第二个数组的第三个第一个索引,而不是数组的第三个索引的第一个索引。

您可以使用

 A[ind[0],ind[1]]

您也可以使用(如果您想要同时使用更多索引);

A[indx,indy]

其中indxindy是第一维和第二维的索引数组。

请参阅此处了解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数组功能,你可以将索引存储在一个元组中。

相关问题