4

P多次元配列に別の配列のインデックスを付けようとしていますindices。これは、次のように、最後の軸に沿って必要な要素を指定します。

import numpy as np

M, N = 20, 10

P = np.random.rand(M,N,2,9)

# index into the last dimension of P
indices = np.random.randint(0,9,size=(M,N))

# I'm after an array of shape (20,10,2)
# but this has shape (20, 10, 2, 20, 10)
P[...,indices].shape 

形状の配列を取得するために、どうすれば正しくインデックスPを作成できますか?indices(20,10,2)

それがあまり明確でない場合:任意のiおよびj(範囲内で)私はmy_output[i,j,:]に等しくなりたいP[i,j,:,indices[i,j]]

4

1 に答える 1

2

私はこれがうまくいくと思います:

P[np.arange(M)[:, None, None], np.arange(N)[:, None], np.arange(2),
  indices[..., None]]

きれいじゃない、わかってる...


これは見栄えが良いかもしれませんが、読みにくくなる可能性もあります。

P[np.ogrid[0:M, 0:N, 0:2]+[indices[..., None]]]

またはおそらくより良い:

idx_tuple = tuple(np.ogrid[:M, :N, :2]) + (indices[..., None],)
P[idx_tuple]
于 2013-03-27T14:19:39.167 に答える