2011-02-02 68 views
7

我有兩個像這樣的2D numpy數組,代表三個點之間的x/y距離。我需要x/y距離作爲單個數組中的元組。將兩個2D numpy數組連接成一個2元組的單個二維數組

所以從:

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 /連擊,但他們都不各種排列做我想做的嘗試。代碼中的實際數組可能是巨大的,因此在Python中迭代元素並「手動」重新排列並不是速度方面的選項。

編輯: 這是我想出了在最後:https://gist.github.com/807656

+1

是僅僅是一個巧合,`x_dist`和`y_dist`是一樣的嗎?你的應用中消極距離的含義是什麼? '_dist`總是'對稱的',但是上部對角線的部分只是消極的?你期望處理多少點?這種數組堆棧的目的是什麼?這些元素是否處於「最佳」狀態以便進一步計算?只是一些tough,,謝謝 – eat 2011-02-02 13:26:49

+0

這是巧合。爲了理智的緣故,示例點是(0,0),(1,1),(2,2)。 _dist確實是對稱的。堆疊數組的目的是我可以使用它們移動點。見鏈接的要點。 – Zarkonnen 2011-02-02 14:07:06

回答

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

回報dists像你希望他們。之後,它不是「2元組的單個二維數組」,而是一個正常的3D數組,其中第三個軸是兩個原始數組的並置。

你看:

dists.shape # (3, 3, 2) 
7
numpy.rec.fromarrays([x_dists, y_dists], names='x,y') 
+0

太棒了!這正是我想要的。那麼,呃,看起來你好像對numpy瞭解的那樣,是我用一種理智的方式編輯的計算這些成對距離的函數? – Zarkonnen 2011-02-02 11:40:50

相關問題