假设您有一个带有集群中心的矩阵,并且您希望将它们合并。例如,假设7个中心:
176 187 96
47 52 35
102 112 80
59 60 55
145 156 83
56 54 30
229 255 128
我有一个返回分组列表的函数。行是组,列是作为该组成员的原始数据行的索引。例如,让我们说:
2 4
1 5
2 6
4 6
这意味着第一组包含第2和第4点,第二组包含第1和第5点等。
对于每个分组,我将“分数”定义为该组中两个点之间的距离。我还将聚类中心定义为组内两个点的平均值。
我想以矢量化的方式确定点之间距离最小的分组以及该组的中心。
答案 0 :(得分:0)
要计算这些东西,我们可以先使用你的cluster
数组创建一个3D数组,其中每个分组用一行表示,XYZ用列表示,第三个维度是两个分组。中心。
让我们创建原始数据:
orig = [176 187 96; 47 52 35; 102 112 80; 59 60 55; 145 156 83; 56 54 30; 229 255 128];
groups = [2 4; 1 5; 2 6; 4 6];
然后我们重塑它,以便成对沿着第三维排列
data = permute(reshape(orig(groups,:), size(groups,1), size(groups,2), []), [1 3 2]);
% data(:,:,1) =
% 47 52 35
% 176 187 96
% 47 52 35
% 59 60 55
% data(:,:,2) =
% 59 60 55
% 145 156 83
% 56 54 30
% 56 54 30
然后我们可以计算每组的平均值
centers = mean(data, 3);
% 53 56 45
% 160.5 171.5 89.5
% 51.5 53 32.5
% 57.5 57 42.5
我们可以找到每个组合的两个成员之间的距离
distances = sqrt(sum(diff(data, [], 3).^2, 2))
% 24.658
% 45.727
% 10.488
% 25.884
" best"一个是距离最小的那个
[mindist, best] = min(distances);
inds(best,:)
% 2 6