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.5
和numpy 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
只有一个维度。
这是因为list
s的解释就像是一个元组,这等同于“单独”传递它们:
x [[0,1],[1,2]]
二维的^^^^^^ -----索引
^^^^^^^ -------------第一维的索引