2017-07-29 26 views
1

類似問題here 我有三個任意一維數組,例如:創建3D的numpy的陣列從三個一維數組座標,第一索引改變最快

x_p = np.array((0.0,1.1, 2.2, 3.3, 4.4)) 
y_p = np.array((5.5,6.6,7.7)) 
z_p = np.array((8.8, 9.9)) 

我需要

points = np.array([[0.0, 5.5, 8.8], 
        [1.1, 5.5, 8.8], 
        [2.2, 5.5, 8.8], 
        ... 
        [4.4, 7.7, 9.9]]) 

1)第一個索引變化最快.2)點是浮點座標,而不是整數索引。 3)我從1.7.0版本注意到,numpy.meshgrid改變行爲與默認indexing='xy'需要用

np.vstack(np.meshgrid(x_p,y_p,z_p,indexing='ij')).reshape(3,-1).T

與去年指數變化快,這不是我想要得到的結果點。 (這是從1.7.0只提到,meshgrid支持尺寸> 2,我沒有檢查)

回答

1

我發現這有一些試驗和錯誤。

我認爲ij v xy索引一直在meshgrid永遠(這是sparse更新的參數)。它隻影響3個返回元素的順序。

要得到x_p變化最快我把它放在參數列表中,然後使用::-1在最後顛倒列順序。

我用stack在最後一個新的軸上連接數組,所以我不需要轉置。但重塑和轉置都很便宜(時間明智)。所以他們可以用於任何有效並且可以理解的組合。

In [100]: np.stack(np.meshgrid(z_p, y_p, x_p, indexing='ij'),3).reshape(-1,3)[:,::-1] 
Out[100]: 
array([[ 0. , 5.5, 8.8], 
     [ 1.1, 5.5, 8.8], 
     [ 2.2, 5.5, 8.8], 
     [ 3.3, 5.5, 8.8], 
     [ 4.4, 5.5, 8.8], 
     [ 0. , 6.6, 8.8], 
     ... 
     [ 2.2, 7.7, 9.9], 
     [ 3.3, 7.7, 9.9], 
     [ 4.4, 7.7, 9.9]]) 
1

你可能會置換軸與np.transpose實現在所需的格式輸出 -

np.array(np.meshgrid(x_p, y_p, z_p)).transpose(3,1,2,0).reshape(-1,3) 

示例輸出 -

In [104]: np.array(np.meshgrid(x_p, y_p, z_p)).transpose(3,1,2,0).reshape(-1,3) 
Out[104]: 
array([[ 0. , 5.5, 8.8], 
     [ 1.1, 5.5, 8.8], 
     [ 2.2, 5.5, 8.8], 
     [ 3.3, 5.5, 8.8], 
     [ 4.4, 5.5, 8.8], 
     [ 0. , 6.6, 8.8], 
     [ 1.1, 6.6, 8.8], 
     [ 2.2, 6.6, 8.8], 
     [ 3.3, 6.6, 8.8], 
     [ 4.4, 6.6, 8.8], 
     [ 0. , 7.7, 8.8], 
     [ 1.1, 7.7, 8.8], 
     .... 
     [ 3.3, 7.7, 9.9], 
     [ 4.4, 7.7, 9.9]]) 
相關問題