【发布时间】:2016-10-06 01:03:27
【问题描述】:
我注意到在处理数组副本时出现了一些意外行为。例如,我有一个 NumPy 数组 (a):
import numpy as np
a = np.random.randint(9, size=(4,4))
输出:
array([[3, 4, 4, 3],
[0, 0, 4, 2],
[6, 3, 1, 6],
[1, 5, 5, 5]])
然后,我复制这个数组 (b) 来操作副本并保持原件不变:
b = a #copy of the array
b[b == 2] = 0 #manipulating the copy
但是,现在看来原件和副本都已更改:
b = array([[3, 4, 4, 3],
[0, 0, 4, 0],
[6, 3, 1, 6],
[1, 5, 5, 5]])
a = array([[3, 4, 4, 3],
[0, 0, 4, 0],
[6, 3, 1, 6],
[1, 5, 5, 5]])
我不明白为什么当操作仅应用于副本时原始数组会发生更改。这与我对 Matlab 或 R 的期望完全不同。有没有办法防止这种行为?
【问题讨论】:
-
b = a不创建副本。您刚刚创建了一个新引用。 -
阅读有关参考、视图和副本的基本文档:docs.scipy.org/doc/numpy-dev/user/…