我对定义为的拉普拉斯归一化矩阵的定义感到困惑:

  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;

最佳答案

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

也许网络中的边缘被加权了,而某些权重是负的?在那种情况下,将规范化的拉普拉斯矩阵定义为D^{-1/2}*A*D^{-1/2}没有意义,但是我不知道正确的定义是什么。我猜这取决于您使用它的目的。

关于c++ - 具有特征库的归一化拉普拉斯矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25947522/

10-11 22:47
查看更多