2016-10-18 3 views
0

なぜ4dアレイをスライスすると3Dアレイになりますか?私は次元の1つでエクステント1を持つ4次元配列を期待していました。ナンシー4dアレイスライシング

例:

print X.shape 
(1783, 1, 96, 96) 

スライス配列:

print X[11,:,:,:].shape 

または

print X[11,:].shape 

は私に(1, 96, 96)を与えるが、私はそれをBを行うことができます(1, 1, 96, 96)

を期待y print X[11:12,:].shape、しかし私は最初の方法は私が期待どおりに動作しないのだろうか? the docs当たり

+1

また、X [[11]、:] .shape'と言うこともできます – jez

答えて

2

整数、iは、以外1によって低減される返されたオブジェクトの次元をi:i+1と同じ値を返します。特に、p番目の要素と整数(および他のすべてのエントリ:)を持つ選択タプルは、次元がN - 1の対応するサブアレイを返します。 N = 1の場合、返されるオブジェクトは配列スカラーです。


索引が整数である場合したがって、そのインデックスの値(複数可)(ARE)が返され、対応する軸が除去されます。一次元での行動は、あなたが期待するようです:

In [6]: a = np.arange(5); a 
Out[6]: array([0, 1, 2, 3, 4]) 

In [7]: a[2] 
Out[7]: 2 

In [8]: a[2].shape 
Out[8]:() 

aa[2]が0次元である、1次元です。より高い次元で

Xは4次元であり、形状(1783,1,96,96)の場合、 X[11,:,:,:]戻る第一軸指数が11に等しく、その軸が除去されるすべての値。従ってX[11,:,:,:].shape(1,96,96)です。例えばa[2:3]として

スライスが範囲を指定し、その範囲内のすべての値が返され、軸が除去されない:

同様
In [9]: a[2:3] 
Out[9]: array([2]) 

In [10]: a[2:3].shape 
Out[10]: (1,) 

X[11:12, :, :, :]形状(1,1,96,96)を有しています。