2

我有两个需要相乘的大矩阵:

A×D

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

我知道乘法需要大量的 RAM,这就是我在 matlab 中出现内存不足的原因(我在服务器上有 90GB 的 RAM 可用)。

有没有办法分几步来做。也许分解一些方法并将部分保存在一些文件中并逐步进行乘法运算。然后最后将它们结合在一起?示例 matlab 代码将是最有价值的。谢谢

4

1 回答 1

8

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

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

您需要使用该产品做什么?

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

于 2012-05-28T04:45:21.970 回答