5
我已經寫了一個函數,將訓練樣例分配給它們最接近的質心,作爲K均值聚類算法的一部分。在我看來,尺寸是滿意的,有時代碼正確運行。但經常出現錯誤如何匹配在查找函數matlab中使用的矩陣的元素數
在賦值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
有什麼問題嗎?
rayryeng已經正確地回答了你的問題,但你可能有興趣嘗試一種矢量化的方法'[,,idx] = min(sum(bsxfun(@minus,X,permute(centroids,[3,2,1]))。^ 2,2),[] ,3)''它可以讓你跳過所有的循環,預分配和臨時矩陣,甚至可以壓縮成一行。 – Dan
@丹好主意:)......這是深夜,我沒有時間寫下矢量化的解決方案。這是一個很好的評論。 – rayryeng