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

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

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

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/

相关文章:

matlab - 图形对象类型的完整列表 matlab

matlab - 提取大矩阵的一部分并使用循环函数将它们分配到新变量中

javascript - 有没有办法从 4x4 矩阵计算 X 和 Y 轴上的 3D 旋转

python - 维度为 5 000 000 : Save to Database or File? 的对称稀疏矩阵的性能

python - 从稀疏矩阵中轻松抽取向量,并从样本中创建一个新矩阵(python)

matlab - 使用 cellfun 检查工作区中是否存在变量

Matlab - 根据条件选择特定行

arrays - 如何在 MATLAB 中从字符串创建数值数组?

c++ - OpenCV 均值函数因从 OpenCV 阈值函数创建的掩码而崩溃?

r - 如何从 R Matrix 库访问稀疏矩阵的一些元素?