我有一个40000 * 40000稀疏连接矩阵,代表我的图表,我使用标准化切割算法来聚类此图。在群集之后,我将每个节点的分区标记作为40000 * 1阵列。
将此矩阵表示为簇矩阵的最佳方法是什么,其中将表示每个(i,j)的值,即簇之间的连接。基本上如果我有20个集群,我将需要一个20 * 20矩阵,其中每个元素是集群之间的连接总数。
答案 0 :(得分:2)
从群集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