方法 #1
我假设我们正在寻找非重叠
/不同的
块。因此,我们可以使用Scikit-image的view_as_blocks
工具 -
from skimage.util.shape import view_as_blocks
BSZ = (6,3,3)
out = view_as_blocks(a,BSZ).reshape((-1,)+ (BSZ))
样例运行 -
In [279]: a = np.random.rand(6*3,3*3,3)
In [280]: out = view_as_blocks(a,BSZ).reshape((-1,)+ (BSZ))
In [281]: out.shape
Out[281]: (9, 6, 3, 3)
方法二
只使用NumPy原生工具,如重塑(reshaping)
和转置(transpose)
,以下是一种方式 -
m,n,r = a.shape
split_shp = m//BSZ[0], BSZ[0], n//BSZ[1], BSZ[1], r//BSZ[2], BSZ[2]
out = a.reshape(split_shp).transpose(0,2,4,1,3,5).reshape((-1,)+ (BSZ))
out = matrix.reshape(split_shp).transpose(0,2,4,1,3,5).reshape((-1,)+ (BSZ)) ValueError: total size of new array must be unchanged
- J.Down