0

有一个像 x 这样的 numpy 数组和一个包含所有元素作为 z 的切片,为什么恒等运算符给出错误,尽管改变 z 中任何元素的值都会反映在 x 上,反之亦然

x = np.array([1, 2, 3, 4, 5])

z = x[:]

x is z 

# Output:
False
4

1 回答 1

1

来自Numpy 内部

NumPy 数组由两个主要部分组成,原始数组数据(从现在开始,称为数据缓冲区)和有关原始数组数据的信息。

在切片的情况下z = x[:],它是一个视图,NumPy 存储了一组重要的数据,这些数据描述了如何在不同内存位置的数据缓冲区中解释数据,但它可以共享来自 的元素z,因此两者都有不同的 id 和因此False

>>> x = np.array([1, 2, 3, 4, 5])
>>> z = x[:] # same as x.view()
>>> x[2]
3
>>> x[2] = 1
>>> x
array([1, 2, 1, 4, 5])
>>> z
array([1, 2, 1, 4, 5])
>>> x is z
False

如果你修改xz也会被修改。更多参考Numpy 文档

于 2020-12-12T20:52:32.793 回答