【发布时间】:2014-03-24 13:19:30
【问题描述】:
我试图理解为什么 ndarray 的平面迭代器会这样工作。假设A 是一个ndarray,形状为(N, N),比如说。
A.flat[::N + 1] = 1
将A 的对角元素设置为值1。所以A.flat 以这种方式行动,就像A 上的视图一样。然而,令人惊讶的是,
A.flat[::N + 1][1:] = 1
不修改A(就像如果 A.flat 是一个视图那样)。
A.flat 是一个flatiter 对象,而不是A 的视图。这背后的原因是什么?是否可以将其实现为视图?
[据我了解,原始数组数据与有关该数据解释的信息分开存储——数组长度、数组尺寸、步幅、列顺序等。所以看起来扁平化可以通过设置适当的维度(和步幅,取决于列顺序)。]
【问题讨论】:
-
如果您检查这两个中的
.flags。你可以看到第二个不拥有它自己的数据。