2016-07-04 148 views
1

我有一個尺寸不同的3d numpy數組。我想繪製一個平行於最大二維的切片,並在最小的中途切割。我如何獲得切片?如何獲得numpy數組的最大二維切片?

例如如果我的原始數據是

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

我想獲得的數據集

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

即一半,雖然,因爲它是最小的,所有其它兩維的,因爲他們是大的第一個維度。

回答

1

您可以使用np.rollaxis對於這樣的任務,這將適用於任何多維ndarray,像這樣 -

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

樣品試驗 -

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