2016-10-18 4 views
0

Warum gibt mir das Sliding eines 4d Arrays ein 3d Array? Ich erwartete ein 4d-Array mit Ausdehnung 1 in einer der Dimensionen.Numpy 4d Array Slicing

Beispiel:

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

Scheibe Array:

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

oder

print X[11,:].shape 

gibt mir (1, 96, 96), aber ich erwartete (1, 1, 96, 96)

ich es kann b y print X[11:12,:].shape, aber ich frage mich, warum die erste Methode nicht funktioniert, wie ich es erwarte?

+1

Oder Sie können 'X [[11],:] .shape' sagen – jez

Antwort

2

Per the docs:

eine ganze Zahl i, gibt die gleichen Werte wie i:i+1außer die Dimensionalität des zurückgegebenen Objekts wird durch 1 reduziert. Insbesondere gibt ein Auswahltupel mit dem -ten Element einer Ganzzahl (und allen anderen Einträgen :) das entsprechende Teilarray mit der Dimension N - 1 zurück. Wenn N = 1 dann ist das zurückgegebene Objekt ein Array-Skalar.


Wenn somit Zeigte eine ganze Zahl ist, der Wert (e) an diesem Index ist (sind) zurückgeführt und die entsprechende Achse entfernt wird. In einer Dimension ist das Verhalten wie man erwarten würde:

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]:() 

a 1-dimensional ist, a[2] 0-dimensional.

in höheren Dimensionen, wenn X 4-Dimensions- und Form (1783,1,96,96), dann X[11,:,:,:] gibt alle Werte, wobei die erste Achse Index 11 entspricht, und dann wird die Achse entfernt. So ist X[11,:,:,:].shape(1,96,96).

Wenn die Scheibe einen Bereich angibt, wie a[2:3] dann alle Werte innerhalb dieses Bereichs werden zurückgegeben und die Achse nicht entfernt wird:

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

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

Ähnlich hat X[11:12, :, :, :](1,1,96,96) formen.