切片分配在 numpy 数组中出错,而在循环"for"



我发现python numpy有问题。我想使用切片赋值来获取一个新的 numpy 数组。正如图片所示: 在此处输入图像描述

当我在"for"循环中使用切片赋值时,例如:

v = np.array([[0,1],[2,3],[3,4],[7, 8])    
s = v[:2]
for i in range(1):
s[1] = v[2]

结果表明,赋值中"v"的值发生了变化。

结果与下面不同(只需丢弃"for"循环):

s[1] = v[2]

我对这个问题很疯狂,我什至怀疑 numpy 有什么问题!! 希望有人帮忙!

由于您s分配了v的一部分,因此它实际上不是副本,而只是对v的引用。这意味着如果你改变s你也会改变v

在python中,你可以做的是创建一个数据结构的显式副本,以确保它不是引用(https://docs.python.org/2/library/copy.html)。

在您的示例中,它如下所示:

from copy import deepcopy
v = np.array([[0,1],[2,3],[3,4],[7, 8]])    
s = deepcopy(v[:2])
for i in range(1):
s[1] = v[2]

深拷贝结果:

>>> s
array([[0, 1],
[3, 4]])
>>> v
array([[0, 1],
[2, 3],
[3, 4],
[7, 8]])

没有深度复制的结果:

>>> s
array([[0, 1],
[3, 4]])
>>> v
array([[0, 1],
[3, 4],
[3, 4],
[7, 8]])

最新更新