3

我试图在两个巨大的矩阵(10 * 25,000,000)之间产生一个通常的矩阵乘法。当我这样做时,我的记忆就会耗尽。我如何使用 numpy 的 memmap 来处理这个问题?这甚至是个好主意吗?我并不担心操作的速度,我只想要结果,即使这意味着等待一段时间。提前谢谢你!

8 GB 内存,I7-2617M 1.5 1.5 ghz,Windows7 64 位。我使用 64 位版本的一切:python(2.7)、numpy、scipy。

编辑1:

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

4

2 回答 2

2

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

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

于 2012-08-24T13:42:13.517 回答
1

试试 numpy.memmap 和 numexpr!这将在没有内存 xD 的情况下使用您的磁盘和 CPU 缓存。它像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 对 1row 数据进行 memmap 时,只需给出一些具有正确顺序的形状,numpy memmap 将以所选形状读取该 1row 数据。

于 2015-09-14T13:05:34.707 回答