2012-10-10 111 views
5

我正在努力向量化以下操作。我有一個x,y,z距離數組,我需要找出每個向量之間的差異。Numpy 2D數組按行減行

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

我打算做的是不用循環迭代進行相減。

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] 

謝謝!

回答

2

這裏有一個很好的基礎重塑招:

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

然後arr[i]arr[j]之間的矢量差在diffs[i,j]被發現。

+1

這裏有一個更簡潔的版本:'diffs = arr [:,None] - arr [None,:]'。這是numpy廣播能力的一個例子(http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)。 –

+0

我正在利用廣播;你在那裏做的是隱式地使用'newaxis'(這是一個很好的解決方案)。我會將其添加到答案中,謝謝! – nneonneo

+0

對不起,我不是故意暗示你沒有使用廣播!該聲明是對該方法的一般評論。 –

0

查看scipy.spatial.distance,您可以查看所有距離的功能。

+0

我正在尋找留在numpy圖書館。有小費嗎? – Fatoons