高级索引的定义意味着x [(1,2,3),]与x [(1,2,3)]根本不同。后者等效于x [1,2,3],它将触发基本选择,而前者将触发高级索引。确保了解为什么会发生这种情况。
和
当选择对象obj是非元组序列对象,ndarray(数据类型为整数或布尔值)或具有至少一个序列对象的元组时,会触发高级索引编制ndarray(数据类型为整数或布尔值)。高级索引有两种类型:整数和布尔值。
但是在我自己的测试中,即使对于tupple,如果它没有至少一个slice对象,一个np.newaxis或一个Ellipse对象,那么它将触发高级索引
import numpy as np
arr = np.zeros(shape=(5,5,5))
arr[(1,2,3)].flags.owndata # evaluates to True
这是正确的行为吗?
答案 0 :(得分:0)
In [5]: arr = np.zeros(shape=(5,5,5))
这是带有索引元组的基本索引:
In [6]: arr[(1,2,3)]
Out[6]: 0.0
In [7]: type(_)
Out[7]: numpy.float64
结果是一个项目,而不是数组(或数组的视图)。就是这样:
In [8]: arr[1,2,3]
Out[8]: 0.0
In [9]: type(_)
Out[9]: numpy.float64
像这样的标量numpy项始终具有自己的数据。我在回答有关is
的最新问题时详细说明了这一点: