使用另一个数组索引numpy数组

Dug*_*gas 6 python arrays indexing numpy

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

有没有直接的方法索引numpy数组与另一个?

说我有一个2D数组

>> A = np.asarray([[1, 2], [3, 4], [5, 6], [7, 8]])
array([[1, 2],
   [3, 4],
   [5, 6],
   [7, 8]])
Run Code Online (Sandbox Code Playgroud)

如果我想访问元素[3,1]我输入

>> A[3,1]
8
Run Code Online (Sandbox Code Playgroud)

现在,假设我将此索引存储在数组中

>> ind = np.array([3,1])
Run Code Online (Sandbox Code Playgroud)

并尝试使用索引这次:

>> A[ind]
array([[7, 8],
       [3, 4]])
Run Code Online (Sandbox Code Playgroud)

结果不是A [3,1]

问题是:拥有数组A和ind,获得A [3,1]的最简单方法是什么?

Bas*_*ein 5

那是因为通过提供一个数组,您实际上是在问

A[[3,1]] 
Run Code Online (Sandbox Code Playgroud)

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

您可以使用

 A[ind[0],ind[1]]
Run Code Online (Sandbox Code Playgroud)

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

A[indx,indy]
Run Code Online (Sandbox Code Playgroud)

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

有关 numpy 数组的所有可能的索引方法,请参见此处:http : //docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html


Mik*_*ler 5

只需使用一个元组:

>>> A[(3, 1)]
8
>>> A[tuple(ind)]
8
Run Code Online (Sandbox Code Playgroud)

A[]实际调用特殊方法__getitem__

>>> A.__getitem__((3, 1))
8
Run Code Online (Sandbox Code Playgroud)

并使用逗号创建一个元组:

>>> 3, 1
(3, 1)
Run Code Online (Sandbox Code Playgroud)

将这两个基本的 Python 原则放在一起可以解决您的问题。

如果您不需要 NumPy 数组功能,您可以首先将索引存储在元组中。