K-ortalama kümeleme algoritmasının bir parçası olarak en yakın yüzdeliklerine eğitim örnekleri atamak için bir işlev yazdım. Bana göre boyutlar tatmin edildi ve kod zaman zaman düzgün çalışıyor. Ama sık sık, Bir görev A (:) = B ise hatamatlab öğesinde kullanılan matris öğelerinin sayısını eşleştirme nasıl yapılır?
olsun, A unsurları ve B sayısı aynı olmalıdır. hat İşte
idx(i) = find(dist == value);
için
sorun burada kod nedir
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
mı?
rayryeng doğru soruya cevap vardır:
yerine endeksi, yapmak istediğiniz tam olarak ne küçük değeri oluşur ilk kez, bir belirleyen
min
ikinci çıkış argümanı kullanmak ama vektörel bir yaklaşım denemekle ilgilenebilirsiniz. [~, idx] = min (toplam (bsxfun (@minus, X, permute (centroids, [3,2,1])).^2,2), [] , 3) 'tüm döngüleri, ön tahsisi ve geçici matrisleri atlamanıza ve hatta tek bir hatta yoğunlaşmanıza izin verir. – Dan@Dan İyi fikir:) ... gece geç oldu ve vectorized çözümü yazmak için zamanım olmadı. Bu iyi bir yorum. – rayryeng