【问题标题】:Operations on huge dense matrices in numpynumpy中巨大密集矩阵的运算
【发布时间】:2013-05-04 10:07:15
【问题描述】:

为了训练神经网络,有时我有一个巨大的 212,243 × 2500 密集矩阵 phi,以及向量 y (212243) 和 w (2500),它们存储为 @987654327 @ 双打数组。我要计算的是

w = dot(pinv(phi), y)
# serialize w...
r = dot(w, transpose(phi))
# serialize r...

我的机器在 Ubuntu x64 上有 6 GB 的 RAM 和 16 GB 的交换空间。我开始计算两次,两次它在大约一个小时的工作后以系统(不是 python)交换错误结束。

有没有办法在我的计算机上执行这个计算?不需要用python来完成。

【问题讨论】:

  • 你应该检查h5py。这是之前在stackoverflow.com/a/3315055/1258806 中提出的,它回答了一个类似的问题。
  • 为我工作。在一个体面的系统上只用了几分钟:Python 3.3 64 位、numpy-MKL 1.7.1、Core i7、32 GB RAM、Windows 8。
  • 和fgb说的差不多,你可以试试Pytables。它们都使用相同的底层技术(HDF 和 numpy iirc)

标签: python numpy linear-algebra


【解决方案1】:

如果除了计算 w 之外,您不需要伪逆运算,请将该行替换为:

w = np.linalg.lstsq(phi, y)[0]

在我的系统上,它的运行速度提高了大约 2 倍,并且使用了大约一半的中间存储空间。

【讨论】:

    【解决方案2】:

    让我们看看:

    212,243 row values * 2500 col values * 8 bytes/value = 4,244,860,000 bytes = 4GB
    

    这是在内存中保存整个矩阵所需的内存量。

    如果这是 Java,我建议您提高 JVM 上的最大堆。我不知道 Python 的比喻是什么。

    【讨论】:

    • 但是如果 phi 占用了 RAM 的 2/3,那么作为点积的一部分计算的伪逆的中间结果会存储在哪里?
    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2021-04-24
    • 2013-08-18
    • 2017-09-26
    • 2013-10-05
    • 2019-03-13
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多