一个用于创建 numpy 数组的多个深层副本的衬里?

One liner for creating several deep copies of a numpy array?

在初始化我的代码时,我需要创建几个形状相同的 numpy 数组。做起来很简单

>>> nx=10
>>> ny=10
>>> a = np.zeros((ny,nx))
>>> b = np.copy(a)
>>> c = np.copy(a)
>>> d = np.copy(a)
>>> etc.

但这确实很乏味。我希望可能有一条线可以做到这一点。我试过了

>>> (b,c,d,e,f,g) = 6*[np.copy(a)]

但这给了我几个a的引用,而不是独立的副本。

有没有类似的可以独立出副本的?

我们可以在这里利用元组拆包。如果你正在创建一个标准的 Numpy 数组(零、一、眼睛等),那么你可以通过将形状的最外层值设置为你想要的副本数来实现:

a, b, c, d, e, f, g = np.zeros((7, ny, nx))

请注意,如果您以这种方式创建 "copies",它们实际上都是同一个数组的切片。

如果你真的想复制一个特定的数组(而不是对一个更大的数组的切片进行操作),你应该解压一个调用np.copy

的生成器表达式
# a is the numpy array to be copied
b, c, d, e, f, g = (np.copy(a) for _ in range(6))

确保制作的份数(上面示例中的 6 或 7)是准确的。