c++ - 具有特征库的归一化拉普拉斯矩阵

标签 c++ matrix eigen

我对归一化拉普拉斯矩阵的定义有点困惑:

  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/

相关文章:

从头开始实现的 C++ 神经网络在 MNIST 上无法达到 50% 以上

c++ - 什么时候应该使用非成员运算符重载?

c++ - 如何在不使用new的情况下默认初始化?

c++ - arduino if语句给出错误

arrays - 您如何表示算法中的大型矩阵以在调试时帮助您?

c - 在C中按行对由数据结构组成的矩阵进行排序

c++ - Eigen 稀疏矩阵乘法的内存泄漏

C++/OpenGL VAO 问题

c# - 使用 LinQ 将一系列值添加到列表中

c++ - 成功包含文件,现在处理语义问题