【问题标题】:Combination of points from pre-defined groupings that minimizes distance between the points组合来自预定义分组的点,使点之间的距离最小化
【发布时间】:2016-06-17 14:36:40
【问题描述】:

假设您有一个带有聚类中心的矩阵,并且您想要合并它们。例如假设有 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,依此类推。

对于每个分组,我将“分数”定义为该组中两点之间的距离。我还将聚类中心定义为组内两个点的平均值。

我想以矢量化的方式确定点之间距离最小的分组以及该组的中心。

【问题讨论】:

  • 您所说的“合并”是什么意思,您如何定义“最佳”?
  • 合并 = 中心的平均值。最佳组合 = 距离最短的中心
  • 您的示例中的“最佳组合”是什么?
  • 我必须找到中心 2,4 和 6 的距离,然后决定哪个组合的距离最小。

标签: matlab


【解决方案1】:

要计算这些东西,我们可以首先使用您的 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

“最好”的是距离最短的那个

[mindist, best] = min(distances);
inds(best,:)

%   2   6

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 2016-12-25
    • 2022-06-17
    • 1970-01-01
    • 2015-06-13
    • 2021-01-30
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多