3

我试图在两个巨大的矩阵(10 * 25,000,000)之间产生通常的矩阵乘法。 当我这样做时,我的记忆力会耗尽。我怎么能使用numpy的memmap来处理这个问题? 这是一个好主意吗?我并不担心手术的速度,我只是想要结果,即使这意味着等待一段时间。先进的谢谢!Python numpy memmap矩阵乘法

8 gbs ram,I7-2617M 1.5 1.5 ghz,Windows7 64位。即时通讯使用64位版本的一切:python(2.7),numpy,scipy。

编辑1:

也许h5py是一个更好的选择?

+0

你说的是“通常的矩阵乘法”,而不是元素方面的乘法我想。 元素的类型是什么? int8? float64? 由此产生的矩阵应该是25,000,000 * 25,000,000或10 * 10? 如果10 * 10,你应该没问题。 10 * 25,000,000 * 8bytes = 2GBytes。 –

+0

(10; 25,000,000)*(25,000,000; 10)有什么想法?这些软件包是否有助于解决这个问题,或者我是否在错误的方向推理。 float64。我可能可以使用float32,但它仍然无法工作。 @FélixCantournet – JEquihua

回答

2

您可能会尝试使用np.memmap,并一次计算一个元素的10x10输出矩阵。

所以你只需加载第一个矩阵的第一行和第二个第一列,然后np.sum(row1 * col1)

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数据。

+0

numexpr仅适用于元素 – RKI