numpy 配列をスライスして、最後の次元の i 番目のインデックスを取得したいと思います。3D 配列の場合、これは次のようになります。
slice = myarray[:,:,i]
しかし、私は任意の次元の配列を取ることができる関数を書いているので、4D 配列の場合は などが必要myarray[:,:,:,i]
です。配列の次元を明示的に記述しなくても、任意の配列に対してこのスライスを取得する方法はありますか?
...
またはがありEllipsis
、これはまさにこれを行います:
slice = myarray[..., i]
省略記号は、角括弧表記の外で使用する必要がある場合の python オブジェクトです。
実は、たった今答えを見つけました。numpy のドキュメントに記載されているように、これはスライス オブジェクトで実行できます。私の特定のケースでは、これでうまくいきます:
idx = [slice(None)] * (myarray.ndim - 1) + [i]
my_slice = myarray[idx]
はslice(None)
、そのインデックス内のすべての要素を選択することと同等であり、最後の [i] は最後の次元の特定のインデックスを選択します。
任意の次元をスライスするという点では、以前の優れた回答を次のように拡張できます。
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)
ただし、以前のバージョンの方が読みやすいと思います。