重复NumPy数组而不复制数据?

NPE*_*NPE 20 python memory numpy large-data

我想创建一个1D NumPy数组,该数组由1000个背对背重复的另一个1D数组组成,不需要复制1000次数据.

可能吗?

如果它有帮助,我打算将两个数组都视为不可变.

Pau*_*aul 26

你不能这样做; NumPy数组必须在每个维度上具有一致的步幅,而您的步幅大多数时间需要以一种方式进行,但有时会向后跳跃.

你可以得到的最接近的是一个1000行的二维数组,其中每一行都是你的第一个数组的视图,或者一个flatiter对象,它的行为类似于一维数组.(flatiters支持迭代和索引,但你无法查看它们;所有索引都会复制.)

建立:

import numpy as np
a = np.arange(10)
Run Code Online (Sandbox Code Playgroud)

2D视图:

b = np.lib.stride_tricks.as_strided(a, (1000, a.size), (0, a.itemsize))
Run Code Online (Sandbox Code Playgroud)

flatiter对象:

c = b.flat
Run Code Online (Sandbox Code Playgroud)

  • `b.flat.base是b`是真的; `b.flatten().base是b`是False,所以你想要`b.flat` (2认同)

Eri*_*rik 6

broadcast_to 在numpy 1.10中添加了,它允许您以更少的努力有效地重复数组.

复制已接受答案的样式:

import numpy as np
arr = np.arange(10)
repeated = np.broadcast_to(arr, (1000, arr.size))
Run Code Online (Sandbox Code Playgroud)