【问题标题】:Matlab Question on Sparse MatricesMatlab关于稀疏矩阵的问题
【发布时间】:2011-07-09 18:10:51
【问题描述】:

我有一个稀疏矩阵 S。 我执行以下操作 D1 = diag(sum(S,2)),基本形成对角矩阵。 现在我需要执行(D1)^(-0.5),但出现错误 “使用 mpower 时出错,请使用 full(x)^full(y)”

转换为完整矩阵会破坏使用稀疏矩阵的目的。

任何建议都会很有帮助。

【问题讨论】:

    标签: matlab normalization sparse-matrix


    【解决方案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 是输入稀疏矩阵。我明白你在说什么,让我试试别的。非常感谢!
    猜你喜欢
    • 2013-04-11
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2017-07-02
    • 2012-06-20
    • 2014-05-12
    • 1970-01-01
    • 2022-08-18
    相关资源
    最近更新 更多