我发现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]])