划分两个矩阵时的内存和时间问题

时间:2012-06-12 10:43:09

标签: performance matlab matrix linear-algebra sparse-matrix

我在matlab中有两个稀疏矩阵

M1尺寸为9千x180万,M2尺寸为1.8百万x1.8百万。

现在我需要计算表达式

M1/M2

我花了一个小时。这是正常的吗?在matlab中是否有任何有效的方法,以便我可以克服这个时间问题。我的意思是它很多,如果我进行多次迭代,那么它将继续花费1小时。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

基于假设使用共轭梯度或Kaczmarz方法等迭代方法进行快速回归计算,并且插入大小使我相信一小时也不错。

由于三角形被“反转”(如果没有明确表示),这两种方法都会接近“一些接近统一的标量因子”时间的许多指令〜9000次1.8e6次“收敛所需的迭代次数“。引号中两件事的乘积可能是大约50(最小)到大约1000(最大)。我没有选择这些来使你的数学工作,这些是关于我做这些的期望。如果你假设每秒大约1e9条指令(这对于内存访问等没有太大影响),那么大约需要13分钟到大约4.5小时。

因此,对于利用稀疏性的算法来说,它似乎在正确的范围内。

如果您了解结构,可能会更好地利用它,但可能不是很多。

注意,这并不是说13分钟是可以实现的。

编辑:一方面注意,我不确定使用了什么,但我假设了迭代方法。也可以使用直接方法(like explained here).如果您利用稀疏性权利,这些方法对于稀疏系统可以非常高效。默认情况下,Matlab很可能会使用它们,但是值得研究Matlab在你的情况下做了什么。

在我有限的经验中,迭代方法通常比直接方法更受欢迎,因为系统的大小变大(你的系统很大)。我们的线性系统也是块三对角线,就像它们在图像处理中经常做的那样。