確認したいこと
numpyに関する質問です。次のいくつかのコードで行列を引数に指定した場合の返される形状のルールがイマイチわかりません。
まず,4次元のyという行列を作成して,2次元のaで部分行列を作成するイメージです(ここでは,スカラー値の軸指定は考えません。)。ファンシーインデックスのルールは次の通りと理解していました(以下のコードを例)。
1 指定した引数は切り出すyの軸に対応する。
2 デフォルト軸は生成される軸としてそのまま反映される(#1の3,6,#2の3,4)。
3 引数の行列は,yに対応する軸において当該行列の形状がそのまま反映される(#1,#2,のa)。
4 複数の行列は同じ形状である必要があり,引数としていくつ指定してもその行列の形状を1つとして反映される(#1,#2,#3のa)。
5 引数に行列が現れた後に続くデフォルト軸は,引数の行列の形状のあとに,反映される(#1の6,#3の4,5)。
ところが,#5の場合に,上記のルール(1,2)に該当しません。(3,1,2,5)が正しいのではないかと思うのですが,上記のルールの理解のどこに間違いがあるのか,おわかりになる方ご教示おねがいできませんでしょうか。
該当のソースコード
python
1>>> y=np.arange(3*4*5*6).reshape(3,4,5,6) 2>>> a=np.array([[0,1]]) 3>>> a.shape 4(1, 2) 5>>> y[:,a,a,:].shape #1 6(3, 1, 2, 6) 7>>> y[:,:,a,a].shape #2 8(3, 4, 1, 2) 9>>> y[a,:,:,a].shape #3 10(1, 2, 4, 5) 11>>> y[:,:,a].shape #4 12(3, 4, 1, 2, 6) 13>>> y[:,a,:,a].shape#5 (3,1,2,5)ではないのか 14(1, 2, 3, 5)
補足情報(FW/ツールのバージョンなど)
Python 3.8.2
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/23 05:55