【问题标题】:Mysterious behaviour of copied NumPy arrays [duplicate]复制的 NumPy 数组的神秘行为 [重复]
【发布时间】: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 的期望完全不同。有没有办法防止这种行为?

【问题讨论】:

标签: python arrays numpy


【解决方案1】:

b = a 只是复制对象的引用而不是对象本身。看看这个copy 函数。总之你要做,b = a.copy()

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2013-07-17
    • 2015-09-14
    • 1970-01-01
    • 2016-05-13
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多