如何使用 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
我有一个 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