如何匹配查找函数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
作为 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