我有两个大矩阵需要相乘:
A×D
其中 A = 2358048 x 1 B = 1 x 492020
我知道乘法需要大量的 RAM,这就是我在 matlab 中出现内存不足的原因(我在服务器上有 90GB 的可用 RAM)。
有没有办法分几步完成。也许将它分解成一些方法并将片段保存在一些文件中并逐步进行乘法运算。那么最后把它们结合起来呢?示例 matlab 代码将是最有值(value)的。谢谢
最佳答案
完整产品的尺寸为 2358048 x 492020,这意味着它有 1,160,206,776,960 个元素。如果将它们存储在 float32 中,则数据量超过 4 TB。你确定你需要完整的矩阵吗?无论如何,您肯定不会将其加载到 RAM 中。
由于它只是两个巨大向量的外积,因此很容易根据需要找到任何给定的子元素:如果 C = AB,则 C(i, j) = A(i, 1) * B(1, j)
。您需要用矩阵做的大部分事情都可以这样完成,也许可以根据需要即时计算产品 block ,而不是存储整个庞大的东西。
您需要使用该产品做什么?
如果出于某种原因你确实需要将整个巨大的东西写到磁盘上,那么循环遍历 A 并一次将一行写入某个文件(只需 A(i,1) * B
),或者在 B 上一次写一列 (B(1,i) * A
)。
关于matlab - 在matlab中将两个大矩阵相乘会产生内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779421/