如何获得numpy数组中最大的2d切片?

时间:2016-07-04 14:04:05

标签: python numpy

我有一个3d numpy数组,其中的尺寸不同。我想绘制一个平行于最大2维的切片和最小的中间切片。我如何获得切片?

e.g。如果我的原始数据是

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

我想获取数据集

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

这是第一个维度的中间,因为它是最小的,所有其他两个维度,因为它们更大。

1 个答案:

答案 0 :(得分: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