在matlab中乘以两个大矩阵会产生内存不足错误

时间:2012-05-28 04:39:21

标签: matlab matrix sparse-matrix matrix-multiplication out-of-memory

我需要两个大型矩阵:

A x D

其中A = 2358048 x 1       B = 1 x 492020

我知道乘法需要大量的RAM,这就是我在matlab中获得Out of Memory的原因(我在服务器上有90GB的RAM)。

有没有办法在几个步骤中完成。也许分解一些如何并保存一些文件中的碎片并逐步进行乘法运算。然后最后将它们组合在一起?样本matlab代码将是最有价值的。感谢

1 个答案:

答案 0 :(得分:8)

完整的产品将是2358048 x 492020,这意味着它有1,160,206,776,960个元素。如果将它们存储在float32中,则超过4TB的数据。你确定需要完整的矩阵吗?无论如何,你肯定不会将它加载到RAM中。

因为它只是两个巨大向量的外部产品,所以很容易根据需要找到任何给定的子元素:如果C = AB,那么C(i, j) = A(i, 1) * B(1, j)。那么你需要对矩阵做的大多数事情都可以像这样完成,也许可以根据需要计算产品的块,而不是存储整个巨大的东西。

您需要将该产品用于什么?

如果由于某种原因你确实需要将整个巨大的东西写到磁盘上,那么很容易就是在A上循环并一次写一行到某个文件(只是A(i,1) * B),或者在B和一次写一列(B(1,i) * A)。