Matlab 计算具有邻接矩阵稀疏表示的度矩阵

Matlab 计算具有邻接矩阵稀疏表示的度矩阵,matlab,sparse-matrix,adjacency-matrix,Matlab,Sparse Matrix,Adjacency Matrix,我试图计算一个图的拉普拉斯矩阵。我已经计算了邻接矩阵的稀疏表示,它存储在一个尺寸为Nx3的文本文件中。N节点的大小(第i个节点第j个节点权重)。我用adj=spconvert(adj)在Matlab中打开这个文件。下一步是计算该稀疏矩阵的度矩阵,以便执行操作L=D-adj。如何计算以图的稀疏邻接矩阵作为输入的度矩阵?为了计算度矩阵,我计算每个节点的度: for i=1:n % size of the node degree(i) = length(find(adj(:,1) == i

我试图计算一个图的拉普拉斯矩阵。我已经计算了邻接矩阵的稀疏表示,它存储在一个尺寸为Nx3的文本文件中。N节点的大小(第i个节点第j个节点权重)。我用
adj=spconvert(adj)在Matlab中打开这个文件。下一步是计算该稀疏矩阵的度矩阵,以便执行操作
L=D-adj
。如何计算以图的稀疏邻接矩阵作为输入的度矩阵?为了计算度矩阵,我计算每个节点的度:

for i=1:n % size of the node
    degree(i) =  length(find(adj(:,1) == i & adj(:,3) == 1));
end
但是,如何执行D和A的减法?

使用该函数将度向量转换为稀疏对角矩阵。然后从对角矩阵中减去邻接矩阵得到拉普拉斯算子。使用代码的示例:

adj = spconvert(adj);
for i=1:size(adj, 1)
    degree(i) = CalcDegree(adj, i)
end
D = spdiags(degree, 0, size(adj, 1), size(adj, 2));
L = D - adj;

顺便说一下,用于计算节点度数的代码可能不正确。

度数矩阵大小是节点的大小。然而,adj矩阵有不同的大小,即边的数量。我猜你指的是我的方法。我和spdiags之间有问题???索引超过了矩阵维度。114 a时的误差==>spdiags((len(k)+1):len(k+1),:)=[i+d(k)B(i+(m>=n)*d(k),k)];用于计算节点度的代码符合文本文件中邻接矩阵的3列表示形式,而不是使用spconvert解析文本文件后的表示形式,spconvert应该是一个矩阵,其行数和列数等于顶点数,而不是边数(en.wikipedia.org/wiki/adjacency_matrix)。这也是你得到不正确维数的原因。是的,你是对的,但是我计算了邻接矩阵的稀疏表示。因此,我没有使用NxN矩阵,而是使用了一组活动的边,不需要这样做。Matlab将稀疏矩阵有效地存储在其稀疏矩阵对象类型中,这是通过spconvert获得的。好的,我喜欢你的评论,但是它必须使用初始稀疏表示来计算?