【问题标题】:Wrong examples in numpy indexing documentation?numpy 索引文档中的错误示例?
【发布时间】: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


【解决方案1】:

y 不是视图,因为它是标量,而不是数组。基本切片生成的所有数组始终是原始数组的视图。

【讨论】:

  • @kwunlyou:如果你觉得答案有帮助,你可以accept it
猜你喜欢
  • 2016-10-24
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-02
  • 1970-01-01
  • 2021-08-21
相关资源
最近更新 更多