Matlab中关于稀疏矩阵的问题

3
我有一个稀疏矩阵S。 我执行以下操作 D1 = diag(sum(S,2)),基本上形成一个对角线矩阵。 现在我需要执行(D1)^(-0.5),但我收到一个错误消息:"Error using mpower, use full(x)^full(y)"。 将其转换为完整的矩阵将会破坏使用稀疏矩阵的目的。 任何建议都将非常有帮助。
1个回答

3
将对角矩阵乘以一个数的操作可以通过对对角线元素逐个进行操作来简单完成... 所以:
D1_diagonal_elements = sum(S,2);
your_result = diag(D1_diagonal_elements .^ (-0.5));

谢谢,我尝试了那个方法,但是出现了“使用power时出错,内存不足”的错误。 - Kid_A
它适用于正幂,对于负幂我得到了那个错误。 - Kid_A
嗯...那是一个相当大的矩阵,甚至完整的对角线都无法放入内存 :) 原因可能是由于x.^(-0.5)==1/sqrt(x),所有稀疏对角线的零元素都被转换为Inf,实际上将向量转换为全向量。顺便问一下:你想用结果做什么?你能先收集非零元素,然后摆脱剩余的Inf吗? - Latanius
我正在尝试对一个大矩阵执行共聚类。为此,我使用Dhillon算法,其中我首先需要将稀疏输入矩阵转换为X = D1_rootAD2_root,其中D1_root = abs((D1)^(-0.5)),D2_root同理。D1 = diag(sum(A,2)), D2 = diag(sum(A,1))。A是输入的稀疏矩阵。我知道你在说什么,让我试试其他方法。非常感谢! - Kid_A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接