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

fen*_*222 2 matlab matrix out-of-memory sparse-matrix matrix-multiplication

我有两个大型矩阵需要繁殖:

A x D

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

我知道乘法需要大量的RAM,这就是为什么我在matlab中得到Out of Memory(我在服务器上有90GB的RAM).

有几种方法可以做到这一点.也许分解一些如何并保存一些文件中的碎片并逐步进行乘法运算.然后最后将它们组合在一起?样本matlab代码将是最有价值的.谢谢

Dou*_*gal 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) .