numpy数组索引:列表索引和np.array索引给出不同的结果


问题内容

我正在尝试使用列表和np.array索引来索引np.array 。但是他们给出了不同的结果。

这是一个例子:

import numpy as np 
x = np.arange(10)
idx = [[0, 1], [1, 2]]
x[np.array(idx)]  # returns array([[0, 1], [1, 2]])

但是直接应用列表会产生错误

x[idx]  # raises IndexError: too many indices for array

我期望上面的返回与使用np.array索引相同的结果。有什么想法吗?

我正在使用python 3.5numpy 1.13.1


问题答案:

如果是数组,则将其解释为包含索引的最终数组的形状-但如果是列表,则是“维度”(多维数组索引)上的索引。

因此,第一个示例(带有array)等效于:

[[x[0], x[1],
 [x[1], x[2]]

但是第二个示例(list)解释为:

[x[0, 1], x[1, 2]]

但是x[0, 1]给一个IndexError: too many indices for array因为你x只有一个维度。

这是因为lists的解释就像是一个元组,这等同于“单独”传递它们:

x [[0,1],[1,2]]
          二维的^^^^^^ -----索引
  ^^^^^^^ -------------第一维的索引