Matlab 用spark乘两个大矩阵

Matlab 用spark乘两个大矩阵,matlab,scala,matrix,apache-spark,matrix-inverse,Matlab,Scala,Matrix,Apache Spark,Matrix Inverse,我目前正在学习spark。我想计算矩阵W,它的定义是 W=B*H'*逆(R+H*B*H')这里每个变量都是一个矩阵 B=eb*eb'(eb'表示eb向量的转置)[400000*400000] R=eo*eo'(eo'表示eb向量的转置)[200000*200000] H是稀疏矩阵[200000*400000] eb矩阵的大小是4000000*1,所以我的B矩阵的大小是400000*400000现在的问题是存储这个文件,我目前使用4GB RAM,500GB磁盘空间的计算机。最初,我在matlab中

我目前正在学习spark。我想计算矩阵W,它的定义是
W=B*H'*逆(R+H*B*H')
这里每个变量都是一个矩阵

  • B=eb*eb'(eb'表示eb向量的转置)[400000*400000]
  • R=eo*eo'(eo'表示eb向量的转置)[200000*200000]
  • H是稀疏矩阵[200000*400000]
  • eb矩阵的大小是4000000*1,所以我的B矩阵的大小是400000*400000现在的问题是存储这个文件,我目前使用4GB RAM,500GB磁盘空间的计算机。最初,我在matlab中通过块乘法实现了这一点,并将输出写入文件,输出文件大小超过300GB。在我使用spark完成之后,它花费了很多时间。它花费的时间更少,但输出文件大小相同

    我用这个方法把两个向量相乘


    在计算B矩阵之后,我无法计算B*H',因为它需要将它们存储在RAM中,以便将这两个矩阵相乘。当我运行上面的代码时,它给出了内存异常。有没有办法在内存有限的情况下进行计算?我的意思是,不需要把总数输入内存。以及如何计算[200000*200000]大矩阵的逆如果你的目标是学习Skad,则不知道如何计算大矩阵的逆。关于用于避免大型矩阵求逆的算法和技术(理论和应用)有大量文献。最好建议您了解矩阵求逆的替代方法。数学家们对实际问题漠不关心,把他们的逆运算抛诸脑后,让差劲的计算学家去实际求解不带逆运算的方程组,这在计算上非常昂贵。谢谢,虽然我可以避免逆运算,但我不能避免矩阵乘法,事实上,我必须在matlab中完成这项工作,但是数据太大了,所以我的导师建议我学习spark,所以我学习spark是为了这个乘法。也没有必要计算400000乘以400000的
    B
    。尝试更改执行乘法的顺序。例如,
    H*eb
    为200000×1。这个结果的转置等于
    eb'*H'
    。当然,20万乘20万仍然很大。这些矩阵是对称的,可以通过存储在文件中的结果逐元素或逐行计算。我已经做到了这一点,之后我应用了相同的乘法方法,其输出文件也超过100GB,但问题再次出现,除了H之外,所有矩阵都有75%以上的非零值