2011-02-02 26 views
7

私は3つの点の間のx/y距離を表すこのような2つの2D numpy配列を持っています。私は単一の配列のタプルとしてx/y距離が必要です。2つの2D numpy配列を2つのタプルの1つの2次元配列に結合する

soから:

x_dists = array([[ 0, -1, -2], 
       [ 1, 0, -1], 
       [ 2, 1, 0]]) 

y_dists = array([[ 0, -1, -2], 
       [ 1, 0, -1], 
       [ 2, 1, 0]]) 

私が必要:

dists = array([[[ 0, 0], [-1, -1], [-2, -2]], 
       [[ 1, 1], [ 0, 0], [-1, -1]], 
       [[ 2, 2], [ 1, 1], [ 0, 0]]]) 

私はdstack/hstack/vstack/CONCATENATEの様々な順列を使用してみましたが、それらのどれも私がやりたいように見えるん。コード内の実際の配列は巨大である可能性が高いため、Pythonの要素を反復処理し、「手動で」並べ替えを行うのは速度的な選択肢ではありません。

編集: これは私が最後に思い付いたものです:https://gist.github.com/807656

+1

ですが、 'x_dist'と' y_dist'が同じであることは単なる偶然でしょうか?また、あなたのアプリで負の距離の意味は何ですか? '_dist'は常に '対称的'でしょうか?しかし、uppertridiagonal部分はちょうど陰性ですか?あなたは何点を扱いたいと思っていますか?この配列の積み重ねの目的は何ですか?さらなる計算のために要素が「最適な」順序にある​​か?ちょうどいくつかのtoughts、ありがとう – eat

+0

それは偶然です。例のポイントは正気のために(0、0)、(1,1)、(2,2)です。 _distは確かに対称です。配列を積み重ねる目的は、それらを使ってポイントを動かすことです。リンクされた要点を参照してください。 – Zarkonnen

答えて

10
import numpy as np 
dists = np.vstack(([x_dists.T], [y_dists.T])).T 

あなたがそれらを望んでいたようdistsを返します。その後、「2タプルの単一の2D配列」ではなく、通常の3D配列であり、第3の軸は元の2つの配列の連結です。

あなたは以下を参照してください

dists.shape # (3, 3, 2) 
+1

それは確かに私が望んだものです。私は、「2Dタプルの2D配列」という言葉の使い方が誤解を招くのではないかと心配しています。 :( – Zarkonnen

+0

待っていた 'dists'のあなたの例は明らかでした:) – eumiro

7
numpy.rec.fromarrays([x_dists, y_dists], names='x,y') 
+0

ブリリアント!それはまさに私が望んでいたものです。ですから、numpyについて知っているように見えますが、私はこれらのペア間の距離を計算するための元気な方法で編集した関数ですか? – Zarkonnen

+0

編集:実際には、これは私に何かをする方法を知っている配列を与えません。 – Zarkonnen