我对归一化拉普拉斯矩阵的定义有点困惑:
D^{-1/2}*A*D^{-1/2}
wiki 的句子:(对我来说不太清楚}::
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作为邻接矩阵,当对应的节点相连时,A就有1。因此,正如您所说,D 中的条目可以通过 A 中的行总和来计算。但这些总和始终为正,因为您要添加零和一。所以我不明白为什么你的 D 矩阵有负数。
也许网络中的边是加权的并且某些权重是负数?在这种情况下,归一化拉普拉斯矩阵的定义为 D^{-1/2}*A*D^{-1/2}
没有意义,但我不知道正确的是什么定义是.我想这取决于你用它做什么。
关于c++ - 具有特征库的归一化拉普拉斯矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25947522/