我想尝试在matlab中计算三个矩阵的乘法。 矩阵的形成如下所述:
L = D^(-1/2) * A * D^(-1/2);
D
,A
和L
是n*n
矩阵。 A
和L
不对角线或稀疏,但D
是对角线。在这种情况下n = 16900
。当我在matlab中计算L
时,需要很长时间,大约4个小时!
我的问题是:是否有更有效的方法来计算L
?
答案 0 :(得分:0)
不是使用朴素矩阵乘法,而是可以专门渐近更快的。我想到了Strassen的算法,但如果我没记错的话,它通常具有高常数,尽管它的渐近复杂性更好。如果矩阵中的可能值集非常有限,则可以使用“四俄罗斯”方法的变体。
答案 1 :(得分:0)
您可以使用bsxfun
两次。我不确定它会更快或更快:
v = diag(D).^(-1/2); %// this is the same as diag(D.^(-1/2))
L = bsxfun(@times, v.', bsxfun(@times, A, v));