我试图在两个巨大的矩阵(10 * 25,000,000)之间产生通常的矩阵乘法。 我的记忆耗尽了。我怎么能用numpy的memmap来处理这个? 这甚至是个好主意吗?我不太担心操作的速度,我只是想要结果,即使它意味着等待一段时间。先谢谢你了!
8 gbs ram,I7-2617M 1.5 1.5 ghz,Windows7 64位。我使用64位版本的所有东西:python(2.7),numpy,scipy。
EDIT1:
也许h5py是更好的选择?
答案 0 :(得分:2)
您可以尝试使用np.memmap
,并一次计算10x10输出矩阵一个元素。
所以你只需要加载第一个矩阵的第一行和第二个矩阵的第一列,然后加载np.sum(row1 * col1)
。
答案 1 :(得分:1)
尝试numpy.memmap和numexpr!这将使用没有内存xD的磁盘和CPU chache。它很像fortran循环。这里有一些代码:python - way to do fast matrix multiplication and reduction while working in memmaps and CPU。但要注意它将创建的文件的大小 - 如果它们只是临时文件,稍后将其删除,如果没有,那么我认为最好将它们与压缩9x的pandas.hdf5文件组合。所以你创建data.tofile用memmap加载它,计算,保存memmap到pandas.hd5f,删除memmap。将数据存储在一行中也是hdf5文件的一些选项,它应该占用更少的空间 - 我想我在某处读到了它。此外,当您使用numpy memmap 1row数据时,只需给出一些具有正确顺序的形状,而numpy memmap将读取所选形状的1row数据。