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

时间:2019-06-21 14:22:04

标签: python arrays numpy deep-copy

在初始化代码时,我需要创建几个相同形状的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的几个引用,而不是独立的副本。

是否有类似的东西可以提供独立的副本?

1 个答案:

答案 0 :(得分:1)

我们可以在这里利用元组拆包的优势。如果要创建标准的Numpy数组(零,一,眼等),则可以通过将形状的最外层值设置为所需的份数来实现:

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

请注意,如果以这种方式创建“副本”,则实际上它们都是位于同一阵列中的所有切片。

如果您实际上想制作一个特定数组的副本(而不是对一个更大数组的切片进行操作),则应解压缩对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)是正确的。