2013-01-23 12 views
7

Yaklaşık 144 noktaya sahip bir bölgem var. Elde etmek istediğim, bir noktanın mesafesini diğerleriyle ölçmek ve bir dizide saklamak. Bunu tüm noktalar için yapmak istiyorum. Mümkünse bu verileri tekrarda olmayacak şekilde saklamak istiyorum. Ve ben gibi sorguları yapabilmeliyiz- Tekrarlama olmaksızın tüm noktalar arasındaki mesafeler, no56 için tüm mesafelerin toplamı vs.Bir bölgede bulunan tüm noktaların birbirlerine olan uzaklığının hesaplanması

Noktaların koordinatlarını saklayan iki sütun içeren 3 * 144 dizim var .

+0

X'te tüm noktalar arasındaki tüm ikili mesafeler verirse ve [bu cevabı MATLAB'de çift yönlü mesafeyi hesaplamak için üç yöntemin karşılaştırmasıyla bir bağlantı vermek istedim] (http://stackoverflow.com/a/19456458/2778484). Diğer soru korkunç kafa karıştırıcıdır, ancak cevap çift yönlü mesafeleri, herhangi bir boyuttaki son yöntemi ele alır. – chappjc

cevap

6

Muhtemel bir çözüm (Gerçi hiçbir tekrarı ile ne demek ile gerçekten net değilim): elbette

X are your points with coordinates x = X(:,1), y = X(:,2) 


dist = sqrt(bsxfun(@minus,X(:,1),X(:,1)').^2 + bsxfun(@minus,X(:,2),X(:,2)').^2) 

yüzden

dist(i,j) is the euclidean distance between i and j 

matris simetriktir. İlgili karmaşıklığı kolayca azaltabilirsiniz.

+0

Tekrarla, A ile B arasındaki mesafe formunun B ile A arasındaki aynı olduğu anlamına gelir, bu yüzden hesaba katılmamalıdır. – Vikram

+0

@Vikram, Sağ, matris aslında simetrik. Bu arada, az sayıdaki nokta için (144 olarak), muhtemelen bu daha kaba kuvvet-benzeri yaklaşım daha akıllı yöntemlerden daha hızlıdır. Sadece bir dene. – Acorbe

2

Dizininizin A olduğunu varsayalım ki burada her sütun tek bir noktanın koordinatlarını saklar. Eğer Statistics Toolbox yüklediyseniz

dist = sqrt(sum((A(:, pairs(:, 1)) - A(:, pairs(:, 2))) .^ 2, 1)) 

, sen yerine pdist(A) kullanabilirsiniz: Euclidean distance şöyle

pairs = nchoosek(1:size(A, 2), 2) 

Sonra hesaplamak: (tekrarlar hariç) tüm nokta çiftlerinin kombinasyonları elde etmek için, nchoosek kullanmak aynı etkiyi.

+0

Pdist işlevine sahibim. [Pdist (A)] [4] 'daki [4] neyi hesaplar? – Vikram

+0

@Vikram sadece bir yazım hatası ('pdist 'resmi belgelerine bir köprü yapmaya çalıştım). Pdist (A) olmalıdır. Sabit. –

1

Eğer istatistik araç kutusunu varsa ve daha sonra, dizi X tüm veri varsa

D = pdist(X) 

Sadece bu soruyu fark

+0

Simetrik bir uzaklık matrisi yerine üçgen bir matris ile yaşayabiliyorsanız en kolay çözüm (['squareform'] (http://www.mathworks.com/help/stats/squareform.html) sizi tüm yollarla bulabilir) . +1 Referans için, [pdist 've diğer' manuel 'çözümlerin karşılaştırması için bu diğer gönderinin cevabı'na bakın] (http://stackoverflow.com/a/19456458/2778484). – chappjc

İlgili konular