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)
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)
| 归档时间: |
|
| 查看次数: |
5790 次 |
| 最近记录: |