numpy中巨大密集矩阵的运算

时间:2013-05-09 20:01:13

标签: python numpy linear-algebra

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

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

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

我有没有办法在计算机上执行此计算?它不需要用python完成。

2 个答案:

答案 0 :(得分:3)

如果除了计算w之外的其他任何内容都不需要伪逆,请将该行替换为:

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

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

答案 1 :(得分:0)

让我们看看:

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

你需要多少内存才能将整个矩阵保存在内存中。

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