【问题标题】:slice assignment goes wrong in numpy array while in a "for" recurrent在“for”循环中,numpy 数组中的切片分配出错
【发布时间】:2018-01-25 17:48:32
【问题描述】:

我发现python numpy有问题。我想使用切片分配来获取一个新的numpy数组。如图所示: enter image description here

当我在“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 有什么问题!!! 希望有人帮助!

【问题讨论】:

标签: python numpy slice


【解决方案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]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2021-08-06
    • 2022-01-05
    • 2014-12-15
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多