簡體   English   中英

如何匹配find函數matlab中使用的矩陣元素的數量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM