如何匹配查找函数matlab中使用的矩阵元素数

how to match the number of elements of matrix used in find function matlab

作为 K 均值聚类算法的一部分,我编写了一个函数来将训练示例分配给它们最近的质心。在我看来,尺寸令人满意并且代码有时可以正确运行。但我经常收到错误

In an assignment A(:) = B, the number of elements in A and B must be the same.

对于行

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

这里有什么问题?

这是因为您可能会发现 多个 集群与查询点的距离相同。 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