在" for"中,切片分配在numpy数组中出错。复发

时间:2018-01-25 17:48:33

标签: python numpy slice

我发现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有什么问题! 希望得到某人的帮助!

1 个答案:

答案 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]])