サンプル配列行います
In [291]: A = np.arange(2*3*4).reshape(2,3,4)
In [292]: A[0,0,:]
Out[292]: array([0, 1, 2, 3])
In [293]: A[0,0,2]
Out[293]: 2
をサンプルIDXを行います。
In [294]: idx = np.random.randint(0,4,(2,3),int)
In [295]: idx
Out[295]:
array([[0, 3, 0],
[1, 0, 1]])
これらは第三次元のインデックス値です。第一2次元上のインデックスのための配列を作成します。
In [299]: I,J=np.ix_(np.arange(A.shape[0]),np.arange(A.shape[1]))
In [300]: I,J
Out[300]:
(array([[0],
[1]]), array([[0, 1, 2]]))
In [301]: A[I,J,idx]
Out[301]:
array([[ 0, 7, 8],
[13, 16, 21]])
テスト:
In [302]: A[0,1,3]
Out[302]: 7
In [304]: A[1,2,1]
Out[304]: 21
それらI,J
を得るための様々な方法があります。 np.ix_
は簡単です。 np.ogrid
、np.mgrid
、またはさらにnp.meshgrid
です。
In [306]: I,J = np.mgrid[0:2,0:3]
In [307]: I,J
Out[307]:
(array([[0, 0, 0],
[1, 1, 1]]), array([[0, 1, 2],
[0, 1, 2]]))
In [308]: A[I,J,idx]
Out[308]:
array([[ 0, 7, 8],
[13, 16, 21]])
私は感心しています。うまくいった。 – vega