2012-10-10 18 views
5

次の操作をベクトル化するのには苦労しています。私はx、y、zの距離の配列を持っており、私は各ベクトルの間の違いを見つける必要があります。ナンシー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