我正在尝试使用list和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
。
答案 0 :(得分:2)
如果它是一个数组,它被解释为包含索引的最终数组的形状 - 但如果它是一个列表,它就是“维度”(多维数组索引)的索引。
所以第一个例子(带有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
被解释为它是一个元组,这与“单独”传递它们相同:
x[[0, 1], [1, 2]] ^^^^^^----- indices for the second dimension ^^^^^^------------- indices for the first dimension
答案 1 :(得分:1)
来自 numpy indexing 文档:
ndarrays 可以使用标准Python
x[obj]
语法编制索引,其中x
是数组,obj
是选择。...
当obj是切片对象(由...构造)时,会发生基本切片 括号内的start:stop:step
符号),整数或元组slice
个对象和整数。Ellipsis
和newaxis
个对象可以 穿插这些也是如此。为了保持落后 与Numeric中的常见用法兼容,基本切片也是如此 如果选择对象是任何非ndarray序列(例如 包含list
个对象,slice
对象或Ellipsis
的{{1}}} 对象,但不是表示整数数组或其他嵌入序列。 ...