我在matlab中有两个稀疏矩阵 尺寸为9千x180万的M1和尺寸为1.8百万x1.8百万的M2. 现在我需要计算表达式 M1/M2 我花了一个小时.这是正常的吗?在matlab中是否有任何有效的方法,以便我可以克服
尺寸为9千x180万的M1和尺寸为1.8百万x1.8百万的M2.
现在我需要计算表达式
M1/M2
我花了一个小时.这是正常的吗?在matlab中是否有任何有效的方法,以便我可以克服这个时间问题.我的意思是它很多,如果我进行多次迭代,那么它将继续花费1小时.有什么建议吗?
基于假设使用共轭梯度或Kaczmarz方法等迭代方法的快速背包计算,并且插入大小使我相信一小时也不错.由于三角形被“反转”(如果没有明确地),这两种方法都会在“一些接近统一的标量因子”时间内接近许多指令〜9000倍1.8e6次“迭代次数”收敛所需“.引号中两件事的乘积可能是大约50(最小)到大约1000(最大).我没有选择这些来使你的数学工作,这些是关于我做这些的期望.如果你假设每秒大约1e9条指令(这对于内存访问等没有太大影响),那么大约需要13分钟到大约4.5小时.
因此,对于利用稀疏性的算法来说,它似乎在正确的范围内.
如果你知道结构,可能会更好地利用它,但可能不是很多.
注意,这并不是说13分钟是可以实现的.
编辑:一方面注意,我不确定使用了什么,但我假设迭代方法.也可以使用直接方法(like explained here).如果您正确使用稀疏性,这些方法对稀疏系统非常有效.默认情况下,Matlab很可能会使用它们,但是值得研究Matlab在你的情况下做了什么.
在我有限的经验中,迭代方法通常比直接方法更受欢迎,因为系统的大小变大(你的系统很大).我们的线性系统也是块三对角线,就像它们在图像处理中经常做的那样.