具有特征lib的归一化拉普拉斯矩阵

时间:2014-09-20 09:55:16

标签: c++ matrix eigen

我对标准化拉普拉斯矩阵的定义感到困惑,其定义为:

  D^{-1/2}*A*D^{-1/2}

维基的句子:(对我来说太明显了} ::

D

的相应正对角线条目的正平方根

问题是如果我的D矩阵有超过99个对角线条目小于零,那么负数的平方根只能用复数来完成...

这是否意味着这个总和必须与abs()值一致?或输入矩阵必须用abs()值重写,......?

这就是我现在的方式:

 for ( int i=0; i < data.cols(); i++) {
    //Deg.sqrt();
    Deg(i,i)=1/(sqrt((data.cwiseAbs().row(i).sum())) );

  }

 Lapla=Deg*data*Deg;

1 个答案:

答案 0 :(得分:3)

归一化拉普拉斯矩阵通常是为网络定义的,其中A是邻接矩阵,D是包含节点度数的对角矩阵。作为邻接矩阵,当相应的节点连接时,A具有一个邻接矩阵。因此,正如你所说,D中的条目可以通过在A中取行和来计算。但是这些总和总是正的,因为你要添加0和1。所以我不明白为什么你的D矩阵有负数。

网络边缘可能是加权的,有些权重是负数?在这种情况下,归一化拉普拉斯矩阵的定义为D^{-1/2}*A*D^{-1/2}没有意义,但我不知道正确的定义是什么。我想这取决于你使用它的原因。