71

numpy 配列をスライスして、最後の次元の i 番目のインデックスを取得したいと思います。3D 配列の場合、これは次のようになります。

slice = myarray[:,:,i]

しかし、私は任意の次元の配列を取ることができる関数を書いているので、4D 配列の場合は などが必要myarray[:,:,:,i]です。配列の次元を明示的に記述しなくても、任意の配列に対してこのスライスを取得する方法はありますか?

4

3 に答える 3

110

...またはがありEllipsis、これはまさにこれを行います:

slice = myarray[..., i]

省略記号は、角括弧表記の外で使用する必要がある場合の python オブジェクトです。

于 2012-08-24T21:24:33.110 に答える
17

実は、たった今答えを見つけました。numpy のドキュメントに記載されているように、これはスライス オブジェクトで実行できます。私の特定のケースでは、これでうまくいきます:

idx = [slice(None)] * (myarray.ndim - 1) + [i] 
my_slice = myarray[idx]

slice(None)、そのインデックス内のすべての要素を選択することと同等であり、最後の [i] は最後の次元の特定のインデックスを選択します。

于 2012-08-24T21:29:39.780 に答える
11

任意の次元をスライスするという点では、以前の優れた回答を次のように拡張できます。

indx = [slice(None)]*myarray.ndim
indx[slice_dim] = i
sliced = myarray[indx]

これは、任意の次元からスライスを返しますslice_dim-slice_dim = -1以前の回答を再現します。完全を期すために、上記のリストの最初の 2 行を次のように要約できます。

indx = [slice(None)]*(slice_dim) + [i] + [slice(None)]*(myarray.ndim-slice_dim-1)

ただし、以前のバージョンの方が読みやすいと思います。

于 2013-03-18T22:37:05.400 に答える