如何匹配find函数matlab

时间:2016-01-15 05:29:09

标签: matlab machine-learning cluster-analysis k-means

我编写了一个函数,将训练样例分配给最近的质心,作为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

这里有什么问题?

1 个答案:

答案 0 :(得分:4)

这是因为您可能会找到与查询点共享相同距离的多个群集。 find确定满足布尔条件的所有值作为参数。 idx(i)表示您要为idx数组的位置分配单个值,但find可能会产生多个值,并且会给出分配错误你看到了。

而是使用min的第二个输出参数来确定第一次索引 最小值,这正是您想要完成的:

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
   [~,idx(i)] = min(dist); %// Change
end