试试这个方法:
更新答案现在使用循环。
r = randn(300,2)*5;
r(151:end,:) = r(151:end,:) + 15;
n_clusters = 2;
[idx, C] = kmeans(r, n_clusters);
clusters = cell(n_clusters, 1);
distances = cell(n_clusters, 1);
for ii = 1:n_clusters
clusters{ii} = r(idx==ii, :);
distances{ii} = sqrt(sum((clusters{ii}-C(ii,:)).^2,2));
end
figure;
subplot(1,2,1);
for ii = 1:n_clusters
plot(clusters{ii}(:,1), clusters{ii}(:,2), '.');
hold on
plot(C(ii,1), C(ii,2), 'ko','MarkerFaceColor', 'w');
end
title('Clusters and centroids');
subplot(1,2,2);
for ii = 1:n_clusters
plot(clusters{ii}(distances{ii} > 2,1), clusters{ii}(distances{ii} > 2,2), '.');
hold on
plot(C(ii,1), C(ii,2), 'ko','MarkerFaceColor', 'w');
end
title('Centroids and points with distance > 2');
要获得一个包含点数大于 2 的矩阵的单元格,您可以这样做:
distant_points = cell(n_clusters,1);
for ii = 1:n_clusters
distant_points{ii} = clusters{ii}(distances{ii} > 2,:)
end