【发布时间】:2016-09-08 06:34:43
【问题描述】:
我在 Matlab 中使用 kmeans 得到了一些聚类中心。
现在有一些新的数据点,我不想用for循环比较每个数据点和聚类中心的距离,因为太慢了。
那我该怎么办。
【问题讨论】:
标签: matlab vectorization
我在 Matlab 中使用 kmeans 得到了一些聚类中心。
现在有一些新的数据点,我不想用for循环比较每个数据点和聚类中心的距离,因为太慢了。
那我该怎么办。
【问题讨论】:
标签: matlab vectorization
尝试使用 matlab knnsearch(X,Y),其中 X 是表示 kmeans 中心的矩阵,Y 是新数据点的集合。
【讨论】:
我会做这样的事情。 如果您的新点存储在 coord 中,其中行作为点,列作为坐标,并且您的集群均值类似地存储在 means 中,并且您想知道每个点属于哪个集群最接近 (in )。 那么:
% compute distance
d2 = repmat(sum(coord.^2,2),1,size(means,1)) + repmat(sum(means.^2,2)',size(coord,1),1) - 2*coord*means';
% Assign to nearest cluster
[~, assigns] = min(d2,[],2);
【讨论】: