Matlab关于稀疏矩阵的问题
Posted
技术标签:
【中文标题】Matlab关于稀疏矩阵的问题【英文标题】:Matlab Question on Sparse Matrices 【发布时间】:2011-07-09 18:10:51 【问题描述】:我有一个稀疏矩阵 S。
我执行以下操作
D1 = diag(sum(S,2))
,基本形成对角矩阵。
现在我需要执行(D1)^(-0.5)
,但出现错误
“使用 mpower 时出错,请使用 full(x)^full(y)”
转换为完整矩阵会破坏使用稀疏矩阵的目的。
任何建议都会很有帮助。
【问题讨论】:
【参考方案1】:对角矩阵的幂可以简单地通过对对角元素逐元素进行操作来完成......所以:
D1_diagonal_elements = sum(S,2);
your_result = diag(D1_diagonal_elements .^ (-0.5));
【讨论】:
谢谢,我试过了,但得到“使用电源错误,内存不足” 它适用于积极力量,消极力量我得到了那个错误。 嗯...那是一个相当大的矩阵,甚至完整的对角线都不适合内存:) 原因很可能是因为 x.^(-0.5)==1/sqrt(x ),稀疏对角线的所有零元素都转换为 Inf,实际上将向量转换为一个完整的向量。顺便说一句:你想用结果做什么?你能先收集非零元素,然后去掉剩余的 Inf 吗? 好吧,我正在尝试在一个大型矩阵上执行联合聚类。为此,使用 Dhillon 算法,我首先需要将稀疏输入矩阵转换为 X = D1_rootAD2_root,其中 D1_root = abs((D1)^(-0.5)) 和 D2_root 类似. D1 = diag(sum(A,2)),D2 = diag(sum(A,1))。 A 是输入稀疏矩阵。我明白你在说什么,让我试试别的。非常感谢!以上是关于Matlab关于稀疏矩阵的问题的主要内容,如果未能解决你的问题,请参考以下文章
关于如何在matlab中导入并翻译Hypemesh导出的大型刚度矩阵txt文本