繁体   English   中英

在“ for”循环中,切片分配在numpy数组中出错

[英]slice assignment goes wrong in numpy array while in a “for” recurrent

我发现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有问题!!! 希望有人帮助!

由于您为v分配了s ,因此它实际上不是副本,而只是对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]

使用Deepcopy的结果:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM