from skimage.util import view_as_blocks as viewB
out = viewB(aa, tuple(BSZ)).reshape(-1,*BSZ)
运行时测试-
In [103]: aa = np.reshape(np.arange(270),(18,15))
# @EFT's soln
In [99]: %timeit split_2d(aa, (2,3))
10000 loops, best of 3: 23.3 µs per loop
# @glegoux's soln-1
In [100]: %timeit list(get_chunks(aa, 2,3))
100000 loops, best of 3: 3.7 µs per loop
# @glegoux's soln-2
In [111]: %timeit list(get_chunks2(aa, 9, 5))
100000 loops, best of 3: 3.39 µs per loop
# Proposed in this post
In [101]: %timeit view_as_blocks(aa, (9,5))
1000000 loops, best of 3: 1.86 µs per loop
这里有一种方法可以让你呆在NumPy环境中-
样本运行
1)验证形状的实际大箱:
^{pr2}$2)手动验证值的小案例:
^{3}$如果您愿意使用其他库,^{} 可以在这里使用,如-
运行时测试-
请注意,我使用了}作为它们的定义,它们将其用作块数。在我使用
(2,3)
作为split_2d
和{view_as_blocks
的例子中,我有一个表示块大小的参数BSZ
。所以,我有(9,5)
。get_chunks2
遵循与view_as_blocks
相同的格式。在那里,输出应该是相同的。在您可以使用
np.split
&;np.concatenate
,后者允许在单个步骤中执行第二次拆分:这似乎也应该相对简单地概括到n-dim的情况,尽管我还没有完全遵循这个想法。在
编辑:
对于作为输出的单个数组,只需添加
^{pr2}$np.stack
:切割时,该矩阵(18,15):
在2x3块(9,5)中:
^{pr2}$执行:
^{3}$输出:
相关问题 更多 >
编程相关推荐