复制 numpy 数组列表

Copying a list of numpy arrays

我正在处理 numpy 数组的(列表)列表。作为一个简单的例子,考虑这段代码:

a = [np.zeros(5)]
b = a.copy()
b[0] += 1

在这里,我将一个数组的列表从a复制到b。然而,数组本身并没有被复制,所以:

print(a)
print(b)

都给[array([1., 1., 1., 1., 1.])]。如果我也想复制数组,我可以这样做:

b = [arr.copy() for arr in a]

a 将保持不变。这适用于简单的列表,但在处理嵌套的数组列表时会变得更加复杂,因为每个列表中的数组数量并不总是相同。

有没有一种简单的方法可以复制多级列表及其包含的每个对象而不保留对原始列表中对象的引用?基本上,我想避免嵌套循环以及处理每个子列表的大小。

你要找的是深拷贝

import numpy as np
import copy
a = [np.zeros(5)]
b = copy.deepcopy(a)
b[0] += 1  # a[0] is not changed

这实际上是 numpy doc 中推荐的用于深度复制 object 数组的方法。

你需要使用deepcopy。

import numpy as np
import copy

a = [np.zeros(5)]
b = copy.deepcopy(a)
b[0] += 1

print(a)
print(b)

结果:

[array([0., 0., 0., 0., 0.])]
[array([1., 1., 1., 1., 1.])]