gpt4 book ai didi

python - 如何在有和没有重叠的情况下将 numpy 数组拆分为固定大小的 block ?

转载 作者:太空狗 更新时间:2023-10-29 17:47:38 25 4
gpt4 key购买 nike

假设我有一个数组:

>>> arr = np.array(range(9)).reshape(3, 3)
>>> arr
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])

我想创建一个函数 f(arr, shape=(2, 2)) 接受数组和形状,并将数组拆分为给定形状的 block 没有填充。因此,必要时通过重叠某些部分。例如:

>>> f(arr, shape=(2, 2))
array([[[[0, 1],
[3, 4]],

[[1, 2],
[4, 5]]],

[[[3, 4],
[6, 7]],

[[4, 5],
[7, 8]]]])

我设法使用 np.lib.stride_tricks.as_strided(arr, shape=(2, 2, 2, 2), strides=(24, 8, 24, 8))。但我不知道如何将其推广到所有数组和所有 block 大小。

优选地,对于 3D 阵列。

如果不需要重叠,则应避免重叠。另一个例子:

>>> arr = np.array(range(16).reshape(4,4)
>>> arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> f(arr, shape=(2,2))
array([[[[0, 1],
[4, 5]],

[[2, 3],
[6, 7]]],

[[[8, 9],
[12, 13]],

[[10, 11],
[14, 15]]]])

skimage.util.view_as_blocks 接近,但要求数组和 block 形状兼容。

最佳答案

scikit-image as view_as_windows 中有一个内置函数正是因为这样做 -

from skimage.util.shape import view_as_windows

view_as_windows(arr, (2,2))

sample 运行-

In [40]: arr
Out[40]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])

In [41]: view_as_windows(arr, (2,2))
Out[41]:
array([[[[0, 1],
[3, 4]],

[[1, 2],
[4, 5]]],


[[[3, 4],
[6, 7]],

[[4, 5],
[7, 8]]]])

对于第二部分,使用来自同一系列/模块的表亲 view_as_blocks -

from skimage.util.shape import view_as_blocks

view_as_blocks(arr, (2,2))

关于python - 如何在有和没有重叠的情况下将 numpy 数组拆分为固定大小的 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42831022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com