[英]how to match the number of elements of matrix used in find function matlab
作為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
這里有什么問題?
這是因為您可能會找到與查詢點共享相同距離的多個群集。 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.