2016-07-04 8 views
1

Ich habe ein 3d numpy Array, wo die Abmessungen unterschiedlich sind. Ich möchte eine Scheibe parallel zu den größten 2 Dimensionen und auf halbem Wege durch die kleinste zeichnen. Wie bekomme ich die Scheibe?Wie bekomme ich das größte 2d-Segment eines numply-Arrays?

z.B. wenn meine ursprünglichen Daten

np.ones(3*4*5).reshape(3,4,5) 

ist, würde Ich mag die Dataset

np.ones(3*4*5).reshape(3,4,5)[1,:,:] 

, die auf halber Strecke ist allerdings die erste Dimension erhalten, wie es das kleinste ist und all die anderen beiden Dimensionen, weil sie größer sind.

Antwort

1

Sie könnten np.rollaxis für eine solche Aufgabe verwenden und dass für jede mehrdimensionale ndarray funktionieren würde, wie so -

def ndim_largest_slice(arr): 
    shp = arr.shape 
    return np.rollaxis(arr, np.argmin(shp), 0)[shp[np.argmin(shp)]/2] 

Beispielläufe -

In [511]: arr = np.random.rand(6,7,6,3,4,5) 

In [512]: np.allclose(ndim_largest_slice(arr),arr[:,:,:,1,:,:]) 
Out[512]: True 

In [513]: arr = np.random.rand(6,7,6,4,5,5) 

In [514]: np.allclose(ndim_largest_slice(arr),arr[:,:,:,2,:,:]) 
Out[514]: True 

In [515]: arr = np.random.rand(3,4,5) 

In [516]: np.allclose(ndim_largest_slice(arr),arr[1,:,:]) 
Out[516]: True 
Verwandte Themen