2017-11-03 8 views
1

私はyが、私のx軸に沿った点で、いくつかの配列を持っている - 、...-軸とは、このようにそれにすべてのポイントでグリッドを作成したい:正しい順序でnumpyのグリッドを作成

x = [1, 2, 3] 
y = [20, 40, 60, 80] 
result = [] 
for xi in x: 
    for yi in y: 
     result.append([xi, yi]) 
np.array(result) 

ましたnumpyのでこれを行うには、私に

array([[ 1, 20], 
     [ 1, 40], 
     [ 1, 60], 
     [ 1, 80], 
     [ 2, 20], 
     [ 2, 40], 
     [ 2, 60], 
     [ 2, 80], 
     [ 3, 20], 
     [ 3, 40], 
     [ 3, 60], 
     [ 3, 80]]) 

を与える私はthis質問に次のコードが見つかりました:

np.vstack(np.meshgrid(x, y)).reshape(2, -1).T 

をしかし、これはトンを提供します

array([[ 1, 20], 
     [ 2, 20], 
     [ 3, 20], 
     [ 1, 40], 
     [ 2, 40], 
     [ 3, 40], 
     [ 1, 60], 
     [ 2, 60], 
     [ 3, 60], 
     [ 1, 80], 
     [ 2, 80], 
     [ 3, 80]]) 

これは、最初にx値、次にy値を通過します。

Iは

np.vstack(reversed(np.meshgrid(y, x))).reshape(2, -1).T 

を使用することによってこの問題を回避することができるが、これは

np.vstack(np.meshgrid(x, y, z)).reshape(3, -1).T 

最初Z値を経由3Dにそれ以上動作しない場合、x値は、Y値。

numpyですべてのディメンションで正しい順序を取得するにはどうすればよいですか?

答えて

1

あなたはそれがデカルトインデックス順xyですデフォルトでは、逆の順序を取得するにはindexingパラメータとしてnp.meshgridで行列インデックスijを指定することができます。これは可能性が3Dで

x = [1, 2, 3] 
y = [20, 40, 60, 80] 

np.stack(np.meshgrid(x, y, indexing='ij'), axis=-1).reshape(-1, 2) 
#array([[ 1, 20], 
#  [ 1, 40], 
#  [ 1, 60], 
#  [ 1, 80], 
#  [ 2, 20], 
#  [ 2, 40], 
#  [ 2, 60], 
#  [ 2, 80], 
#  [ 3, 20], 
#  [ 3, 40], 
#  [ 3, 60], 
#  [ 3, 80]]) 

np.stack(np.meshgrid(x, y, z, indexing='ij'), axis=-1).reshape(-1, 3) 
+1

ありがとう、ありがとう;) – Bianfable

関連する問題