【发布时间】:2018-06-11 16:27:42
【问题描述】:
在numpy索引page上,有一个警告段
高级索引的定义意味着 x[(1,2,3),] 与 x[(1,2,3)] 根本不同。后者相当于 x[1,2,3] 将触发基本选择,而前者将触发高级索引。请务必了解发生这种情况的原因。
我尝试运行以下代码
import numpy as np
x = np.arange(3*4).reshape((3, 4))
y = x[(1, 2)]
z = x[(1, 2),]
print("base:", x.base, y.base, z.base)
print("id:", id(x.base), id(y.base), id(z.base))
print(np.shares_memory(x, y), np.shares_memory(x, z))
得到的结果为
base: [ 0 1 2 3 4 5 6 7 8 9 10 11] None None
id: 4299634928 4297628200 4297628200
False False
似乎y 没有返回view,因此x[(1, 2)] 不能作为基本索引,因为
基本切片生成的所有数组都是原始数组的视图。
这是文档中的错误吗?还是我误会了什么地方?
【问题讨论】:
-
使用
x.flags更好地测试/验证这一点,如果OWNDATA: False,这样的对象仍然保留(因为它是实例化的原始模式)一个视图到底层 numpy 数组的某个区域。
标签: python numpy numpy-ndarray