2012-10-10 22 views
5

Aşağıdaki işlemi vectorize etmeye çalışıyorum. Bir dizi x, y, z mesafem var ve her vektör arasındaki farkları birbirinden bulmalıyım.Numpy 2D dizi Satır çıkarma Satır

temp_result = np.array([[0.8, 0., 1.], [0., -0.6, 1.],[0.8, 0., 1.]]) 

Yapmak istediğim şey, döngü yineleme kullanılmadan çıkarılmasıdır.

temp_result[0] - temp_result[0] 
temp_result[0] - temp_result[1] 
temp_result[0] - temp_result[2] 
temp_result[1] - temp_result[0] 
temp_result[1] - temp_result[1] 
temp_result[1] - temp_result[2] 
temp_result[2] - temp_result[0] 
temp_result[2] - temp_result[1] 
temp_result[2] - temp_result[2] 

Teşekkürler!

cevap

2

İşte güzel yenidenbiçimleme tabanlı numara.

+1

İşte daha kısa bir versiyon: 'diffs = arr [:, Yok] - arr [Yok ,:]'. Bu, numpy'nin yayın yeteneğinin bir örneğidir (http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html). –

+0

Yayını zaten kullanıyorum; Orada yaptığınız şey, 'newaxis' kelimesini dolaylı olarak kullanmaktı (ki bu hoş bir çözüm). Cevabı ekleyeceğim, teşekkürler! – nneonneo

+0

Üzgünüz, yayınlamayı kullanmadığınızı ima etmek istemedim! Bu ifade, yöntem hakkında genel bir yorum olarak ifade edildi. –

0

scipy.spatial.distance dosyasını inceleyin, tüm mesafelere karşı tüm işlevleriniz vardır.

arr = temp_result 
diffs = arr[:,None,:] - arr[None,:,:] 

Sonra arr[i] ve arr[j] arasındaki vektör farkı diffs[i,j] bulunur:

+0

Numpy kütüphanesinde kalmayı düşünüyordum. Herhangi bir ipucu? – Fatoons