为一组点计算最接近的簇

时间:2016-06-08 11:35:28

标签: performance matlab classification

我遇到一个问题,我有一个集群中心列表和一个我必须得到最近集群的点列表。

例如:

nclusters = 10;
npoints = 100;
% Generate 10 random clusters in a 2D space
Clusters = rand(nclusters,2);
% Generate 100 random points in a 2D space
Points = rand(npoints,2);

% plot them
figure(1), hold on
plot(Clusters(:,1), Clusters(:,2), 'ro')
plot(Points(:,1), Points(:,2), 'bx')

enter image description here

现在我可以遍历每个点并计算哪个群集是最接近的群集:

  ClusterIndexes = zeros(npoints,1) 
  for i = 1:npoints
      % sum of squared differences (square root can be avoided)
      SquareDist = sum(bsxfun(@minus, Clusters, Points(i,:)).^2, 2);
      % Index of the closest cluster
      [minVal minIdx] = min(SquareDist);
      ClusterIndexes(i) = minIdx;  
  end

  % plot results
  figure(2), hold on
  plot(Clusters(:,1), Clusters(:,2), 'ro')
  plot(Points(:,1), Points(:,2), 'bx')
  plot([Points(:,1) Clusters(ClusterIndexes,1)]', [Points(:,2) Clusters(ClusterIndexes,2)]', 'm-');

enter image description here

由于我使用bsxfun,因此此代码有效并且效率很高。 但是,有没有更好的方法呢?也许摆脱循环?

我在考虑的情况是存在大量的点并且它们可能处于高维空间。

由于

0 个答案:

没有答案