如何使用 MATLAB 对稀疏邻接矩阵进行聚类

How to cluster a sparse adjacency matrix using MATLAB

我有一个 40000*40000 的稀疏连接矩阵来表示我的图,我使用归一化切割算法对该图进行聚类。聚类后​​,我将每个节点的分区标记作为 40000*1 数组。

将此矩阵表示为聚类矩阵的最佳方式是什么,其中将表示每个 (i,j) 的值,即聚类之间的连接。基本上如果我有 20 个集群,我将需要一个 20*20 矩阵,其中每个元素是集群之间的连接总数。

从集群a集群b查找连接数应该相当简单:

cluster_connections(a,b) = nnz(connectivity_matrix(tags==a, tags==b));

下面是一个使用完整矩阵的示例,仅为了提高可读性。稀疏矩阵的行为方式相同。

>> connectivity_matrix = randi([0 1],10)
connectivity_matrix =

   1   1   0   0   0   1   1   0   1   1
   0   0   1   0   1   1   1   1   0   1
   0   1   0   1   1   1   0   0   0   1
   0   1   0   0   1   1   1   1   1   1
   1   1   0   0   0   1   1   0   0   1
   1   0   0   0   0   1   0   1   1   1
   1   1   0   1   0   0   0   1   0   1
   0   0   1   0   1   0   0   1   0   1
   1   0   0   0   0   1   0   1   1   1
   1   1   0   0   1   0   0   0   0   1

>> tags = [1 2 3 2 3 1 2 3 3 1]
tags =

   1   2   3   2   3   1   2   3   3   1


>> connectivity_matrix(tags==2, tags==3)
ans =

   1   1   1   0
   0   1   1   1
   0   0   1   0

>> cluster_connections = nnz(connectivity_matrix(tags==2, tags==3))
cluster_connections =  7