【发布时间】:2016-04-20 16:24:39
【问题描述】:
作为 K-means 聚类算法的一部分,我编写了一个函数来将训练示例分配到它们最近的质心。在我看来,尺寸是满意的,并且代码有时可以正确运行。但经常,我得到错误
在赋值 A(:) = B 中,A 和 B 中的元素个数必须是 一样的。
换行
idx(i) = find(dist == value);
这里是代码
function idx = findClosestCentroids(X, centroids)
K = size(centroids, 1);
idx = zeros(size(X,1), 1);
dist = zeros(K, 1);
for i = 1:size(X,1)
for j = 1:K
dist(j) = sum((X(i,:) - centroids(j,:)).^2);
end
value = min(dist);
idx(i) = find(dist == value);
end
这里有什么问题?
【问题讨论】:
-
rayryeng 已正确回答您的问题,但您可能有兴趣尝试矢量化方法
[~, idx] = min(sum(bsxfun(@minus, X, permute(centroids, [3,2,1])).^2,2),[],3),它可以让您跳过所有循环、预分配和临时矩阵,甚至可以压缩成单行。 -
@Dan 好主意 :)... 已经是深夜了,我没有时间写下矢量化解决方案。这是一个很好的评论。
标签: matlab machine-learning cluster-analysis k-means