übereinstimmen Ich habe eine Funktion geschrieben, um Trainingsbeispiele zu ihren nächsten Zentroiden als Teil eines K-Means-Clustering-Algorithmus zuweisen. Es scheint mir, dass die Dimensionen erfüllt sind und der Code manchmal richtig läuft. Aber häufig, erhalte ich die Fehlerwie die Anzahl der Elemente der Matrix in find Funktion Matlab
In einer Zuweisung A (:) = B, muss die Anzahl der Elemente in A und B gleich sein.
für die Linie
idx(i) = find(dist == value);
Hier ist der Code
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
Was ist das Problem hier?
rayryeng richtig beantwortet hat, aber Sie könnten daran interessiert sein, einen vektorisierten Ansatz zu versuchen '[~, idx] = min (Summe (bsxfun (@minus, X, Permut (Zentroide, [3,2,1])).^2,2), [] , 3) ', mit dem Sie alle Schleifen, die Vorbelegung und temporäre Matrizen überspringen und sogar in einer einzigen Zeile verdichten können. – Dan
@Dan Gute Idee:) ... es war spät in der Nacht und ich hatte keine Zeit, die vektorisierte Lösung aufzuschreiben. Das ist ein guter Kommentar. – rayryeng