我正在生成一个非常大的基于数字0,1和2的排列矩阵。理想情况下,我希望他们48宽,但即使与20满意。现在,我的内存不足,所以想看看是否有一个非内存的选项可用。你知道吗
我确实在一个大内存机器上尝试过,但我更喜欢使用磁盘的选项(我有一个快速的SSD),即使它需要很长时间。正如你所看到的,我已经把它改成了int8而不是int32来节省一些空间,但即使这样也只能做到这一点。18的网格大小是6.5克,19是21克,所以我知道它是指数增长的,我很快就会变成TB。你知道吗
import numpy as np
class LargeGrid():
def permgrid(self, m, n):
inds = np.indices((m,) * n, dtype=np.int8)
arr = inds.reshape(n, -1).T
arr[arr == 2] = -1
return arr
def save(self):
grid_size = 24
grid = self.permgrid(3,grid_size)
np.save('grid', grid)
lg = LargeGrid()
lg.save()
期望磁盘上有一个非常大的文件,但结果是:
Python 3.7.3 (default, Apr 24 2019, 15:29:51) [MSC v.1915 64 bit (AMD64)] on win32
MemoryError: Unable to allocate array with shape (24, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3) and data type int8
看起来你的问题是数组太大了。所以,制作更小的数组,并使用^{} 将它们写入到和
hdf5
(层次数据格式)文件中。你知道吗这将允许您管理当前数组从内存占用的空间量,同时能够将整个大数组存储在文件系统的hdf5文件(
largefile.h5
)中。你知道吗或者,也可以使用^{} 而不是
h5py
以hdf5文件格式存储数据。你知道吗参考文献
我鼓励你看看这些:
h5py
表格
相关问题 更多 >
编程相关推荐