Soru sorİki farklı 3D veri seti arasındaki Euclid mesafesi
mehmetozdogan tarafından 6 yıl önce soruldu

Merhaba elimde 2 faklı x,y,z 'si olan veri seti var. Bu 2 veri setini ayrı ayrı k-means clustering kullanıp sınıflandırarak orta noktalarını buldurdum ve ardından da bu orta noktaları çizdirdim. Amacım bu iki veri seti arasındaki noktalar arasındaki en küçük mesafeyi hesaplatmak.(linkteki resimde x ile en yakın o arasındaki mesafeyi euclid yontemi ile hesaplatmak istiyorum) Şimdiye kadar yazdığım kod aşağıdaki gibidir. Matlabda yeni oldugum için içinden çıkamadım bu mesafeleri nasıl hesaplatabilirim. Birde hesaplattığım noktalar arasına ok koyabilmem mümkün mü? Teşekkürler.
https://resmim.net/f/GUEOsM.jpg
x=xlsread('ucd1.xlsx', 'A:A');
y=xlsread('ucd1.xlsx', 'B:B');
z=xlsread('ucd1.xlsx', 'C:C');
a=xlsread('ucd2.xlsx', 'A:A');
b=xlsread('ucd2.xlsx', 'B:B');
c=xlsread('ucd2.xlsx', 'C:C');
xyz=[x y z];
abc=[a b c];
rng(14,'twister');
[idx1,C1] = kmeans(xyz,150,'MaxIter',3,'Start',C1);
[idx2,C2] = kmeans(abc,150,'MaxIter',3,'Start',C2);
plot3(C1(:,1),C1(:,2),C1(:,3),'kx','color','b')
hold on
plot3(C2(:,1),C2(:,2),C2(:,3),'ko','Color','r')

8 Cevap
En iyi cevap
Caglar Yönetici tarafından 6 yıl önce cevaplandı

Her x'e en yakın o'yu bulmak için mesafeler matrisinin her satırındaki minimum değer kullanılabilir. Tüm x lere mesafeleri toplamı en kucuk olan I yu bulmak için de, mesafeler matrisinin tum sutunlari toplanıp, en kucuk toplami olan seçilebilir? 

Caglar Yönetici tarafından 6 yıl önce cevaplandı

Yazmak anlatmaktan daha pratik geldi,  net olmayan yer varsa yazarsiniz:
vektorler_1=rand([10 3]);

vektorler_2=rand([10 3]);

mesafeler=pdist2(vektorler_1,vektorler_2); %10x10luk matris olusturacak.
%Orn. mesafeler(5,3) ilk kumenin 5. elemani ile ikinci kumenin 3. elemani arasindaki mesafeyi verecek

en_kisa_mesafe=min(min(mesafeler)); %en kucuk mesafe degerini bul

[indis_1,indis_2]=find(mesafeler==en_kisa_mesafe); %en kucuk mesafe degerinin matriste yerini bul

fprintf('İlk matristen %d  ve ikinci matristen %d  numarali eleman alinirsa, \n %d ile en kisa mesafe elde edilir.', …
indis_1, indis_2, en_kisa_mesafe)
 
Cikti:
İlk matristen 6 ve ikinci matristen 4 numarali eleman alinirsa,
1.570025e-01 ile en kisa mesafe elde edilir.

mehmetozdogan tarafından 6 yıl önce cevaplandı

verdiğiniz yanıt için teşekkürler ancak demek istediğim, tüm data seti içerisindeki en kısa mesafe değil. Şekildeki her "x" ile gosterilen noktaya en yakın "o" noktasını bulup hesaplatmak 

mehmetozdogan tarafından 6 yıl önce cevaplandı

Merhaba tekrar,
yanıtınız için teşekkürler. Son yazdığınızın yanıtın ilk cümlesi esas aradığımdı.  Bu konunun devamı niteliğinde bir soru daha sormak istiyorum;
en başta belirttiğim gibi Kmeans ile oluşturulmuş C1 ve C2 veri setlerim var. C1 veri setinde her noktaya C2'de karşılık gelen en yakın noktaya  olan uzaklığı da buldurdum. Ancak bu mesafelerin hangi C1 ve C2  noktaları arasındaki uzaklıklar olduğu bulunabilir mi? en azından hangi mesafenin hangi C1'deki hangi noktaya karşılık geldiğini bulabilirmiyiz?
Teşekkürler.. 
 
 
 

Caglar Yönetici tarafından 6 yıl önce cevaplandı

Tam anlamayadım sanırım, mesafeler matirisi zaten hangi noktadan mesafe hesaplandigina gore dolduruluyor. 
mesafeler(7,2) yazdığınızda, C1'deki 7. eleman ve C2'deki 2. eleman arasindaki mesafeyi gormus olacaksiniz.
Her satirin en kucuk elemani, C2'deki en yakin noktadan hesaplanan mesafe olacak. O en kucuk elemanin hangi sutunda oldugunu kaydedince de hangi elemanin hangisiyle eslestigini kaydetmis olacaksınız.
Mesela C1 3, C2 4 elemanli olsaydı:
https://resmim.net/f/x4kBjB.png

 

mehmetozdogan tarafından 6 yıl önce cevaplandı

Kısaca ben şunu yapmak istiyorum her C1'in (x,y,z) değerini yazdırıp yanına en kısa mesafedeki C2 değerini (x,y,z) yazdırıp, yanına da aralarındaki mesafeyi yazdırmak istiyorum.
 Yani çıktı olarak en son
(C1 (x,y,z),C2 (x,y,z),distance) şeklinde çıktı almak istiyorum.
 
Teşekkürler..

Caglar Yönetici tarafından 6 yıl önce cevaplandı

günaydın,
anladığım kadarıyla bunun için tüm hesaplamaları yaptık?
C1 ve C2'nin xyz olarak değerlerini tutan C1 ve C2 matrisleri var,  her C1 için en kısa mesafedeki C2'nin hangi eleman oldugunu belirten c2_den_secilen dizisi var, yine aynı eşleşme için mesafe değerini veren en_kisa_mesafeler dizisi var. (Bir önceki cevabımdaki resim görünüyor değil mi?)
Hepsini bir anda tek çıktı olarak nasıl alırız mı demek istiyorsunuz?

mehmetozdogan tarafından 6 yıl önce cevaplandı

Merhaba,
Evet aradığım hepsini gormek.. C1(x,y,z olarak) ve C1'e karşılık gelen C2(x,y,z olarak) ve bunların arasındaki mesafe
Teşekkürler