我对标准化拉普拉斯矩阵的定义感到困惑,其定义为:
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;
答案 0 :(得分:3)
归一化拉普拉斯矩阵通常是为网络定义的,其中A是邻接矩阵,D是包含节点度数的对角矩阵。作为邻接矩阵,当相应的节点连接时,A具有一个邻接矩阵。因此,正如你所说,D中的条目可以通过在A中取行和来计算。但是这些总和总是正的,因为你要添加0和1。所以我不明白为什么你的D矩阵有负数。
网络边缘可能是加权的,有些权重是负数?在这种情况下,归一化拉普拉斯矩阵的定义为D^{-1/2}*A*D^{-1/2}
没有意义,但我不知道正确的定义是什么。我想这取决于你使用它的原因。