【问题标题】:Python numpy memmap matrix multiplicationPython numpy memmap 矩阵乘法
【发布时间】:2012-05-27 00:14:45
【问题描述】:

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

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

编辑1:

也许 h5py 是更好的选择?

【问题讨论】:

  • 您谈论的是“通常的矩阵乘法”,而不是我想的元素乘法。元素的类型是什么?整数8?浮动64?结果矩阵应该是 25,000,000*25,000,000 还是 10*10 ?如果是 10*10 你应该没问题。 10*25,000,000*8bytes = 2GBytes。
  • (10;25,000,000)*(25,000,000;10) 有什么想法吗?这些软件包是否有助于克服这一点,还是我的推理方向错误。浮动64。我也许可以使用 float32 但它仍然无法正常工作。 @FélixCantournet

标签: python numpy memory-management matrix-multiplication large-data


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • numexpr 仅在元素方面
    猜你喜欢
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    相关资源
    最近更新 更多