2017-12-05 22 views
2

以下のシナリオを考えます。numpy配列のインデックス付け

import numpy as np 
x = np.random.randint(0,21,size=(10,64,64)) 
y = np.random.rand(10,21,64,64) 

z = np.empty((10,64,64)) 

for i in range(10): 
    for j in range(64): 
     for k in range(64): 
      z[i][j][k] = y[i][x[i][j][k]][j][k] 

numpyインデックスを使用してこの動作を実装するために推奨される(速度に関して)方法は何ですか?

+1

https://stackoverflow.com/questions/46103044/index-n-dimensional-array-with-n-1-d-array – user2357112

答えて

1

これはまさにnp.chooseの目的です.Y軸を先に配置するだけで済みます。

In [6]: z2=np.choose(x,np.rollaxis(y,1)) 

In [7]: np.allclose(z,z2) 
Out[7]: True 

ループ方式よりも15倍高速です。

関連する問題