我发现python numpy有问题。我想使用切片赋值来获得一个新的numpy数组。正如图片所示: enter image description here
当我在"中使用切片分配时,用于"经常性的,例如:
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" recurrent):
s[1] = v[2]
我对这个问题很着迷,我甚至怀疑numpy有什么问题! 希望得到某人的帮助!
答案 0 :(得分:-1)
由于您为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]])