我需要创建一个共识矩阵。假设我有一个矩阵A
如下。
1 1 2 2 3
1 2 2 2 3
1 1 2 3 3
每行代表一种聚类方法,每个值代表一个特定的聚类。例如,A(1,1)
表示通过第一个聚类方法,第一个数据示例分配了第一组。通过使用这个矩阵,我需要创建一个矩阵,如下所示
1/3 2/3 0/3 0/3 0/3
2/3 1/3 1/3 1/3 0/3
0/3 1/3 1/3 2/3 0/3
0/3 1/3 2/3 1/3 1/3
0/3 0/3 0/3 0/3 1/3
在此矩阵C中,C(1,2)
基于矩阵A创建。更明显地,组1中的A(1,1)和A(1,2),也是A(3,1)和A(3) ,2)在第1组中也是如此。所以,C(1,2)= 2/3。对角线固定为1/3。
答案 0 :(得分:0)
您可以使用bsxfun
来比较列
C=squeeze(sum(bsxfun(@eq, A,permute(A, [1 3 2]))));
C(logical(eye(size(C))))=1;
C = C/3;
您首先将3x5
矩阵置换为3x1x5
矩阵,然后使用bsxfun(@eq, ...
比较原始矩阵的列,然后将两个不同行上的元素的位置相加通过使用sum(...,3)
来获得1x5x5
矩阵。现在使用挤压来摆脱单身尺寸。