【发布时间】:2015-04-16 18:00:21
【问题描述】:
我一直在尝试在 IPython 中初始化一个 1000 x 1000 x 120 的 numpy 整数数组,每次我得到一个 MemoryError。我不知道为什么会这样,因为它真的不是那么大的数组。
我的代码很简单:
bigLattice = np.zeros((numsimulations,end2+1,t+1))
如果有什么我可以修复的,请告诉我,以便 numpy 可以访问更多内存。
【问题讨论】:
我一直在尝试在 IPython 中初始化一个 1000 x 1000 x 120 的 numpy 整数数组,每次我得到一个 MemoryError。我不知道为什么会这样,因为它真的不是那么大的数组。
我的代码很简单:
bigLattice = np.zeros((numsimulations,end2+1,t+1))
如果有什么我可以修复的,请告诉我,以便 numpy 可以访问更多内存。
【问题讨论】:
浮点数的默认类型是float64,所以你的矩阵大小是915Mb
In [1]: a = np.zeros((1000,1000,120))
In [2]: %whos
Variable Type Data/Info
-------------------------------
a ndarray 1000x1000x120: 120000000 elems, type `float64`, 960000000 bytes (915 Mb)
Here's a link 在这里您可以找到有关可用dtypes 及其限制的详细信息。
如果您只需要存储一个字节的整数值,那么您可以使用int8 值进行实例化:
np.zeros((1000,1000,120),dtype=np.int8)
这会将大小减少到 114Mb:
%whos
Variable Type Data/Info
-------------------------------
a ndarray 1000x1000x120: 120000000 elems, type `int8`, 120000000 bytes (114 Mb
【讨论】:
uint16 或 uint32,取决于您的需要。 uint16 为 228Mb,uint32 为 457Mb