gpt4 book ai didi

python - 在具有周期性边界的滑动窗口中查看网格单元

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:28 25 4
gpt4 key购买 nike

考虑一个二维数组

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

我想构造一个函数 f(i,j),它从具有周期性边界条件的 A[i,j] 周围的元素中拉出一个 3x3 block 。

例如,非边界元素是

>>> f(1,1)
array([[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10]])

边界元素是

>>> f(0,0)
array([[15, 12, 13],
[ 3, 0, 1],
[ 7, 4, 5]])

view_as_windows 很接近,但没有环绕周期性边界。

>>> from skimage.util.shape import view_as_windows
>>> view_as_windows(A,(3,3))
array([[[[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10]],

[[ 1, 2, 3],
[ 5, 6, 7],
[ 9, 10, 11]]],


[[[ 4, 5, 6],
[ 8, 9, 10],
[12, 13, 14]],

[[ 5, 6, 7],
[ 9, 10, 11],
[13, 14, 15]]]])

在这种情况下 view_as_windows(A)[0,0] == f(1,1) 但 f(0,0) 不在 view_as_windows(A) 中。我需要一个 view_as_windows(A) 类型数组,其元素数量与 A 相同,其中每个元素的形状为 (3,3)

最佳答案

使用np.pad简单地填充wrapping功能然后使用 Scikit's view_as_windows -

from skimage.util.shape import view_as_windows

Apad = np.pad(A,1,'wrap')
out = view_as_windows(Apad,(3,3))

示例运行 -

In [65]: A
Out[65]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])

In [66]: Apad = np.pad(A,1,'wrap')

In [67]: out = view_as_windows(Apad,(3,3))

In [68]: out[0,0]
Out[68]:
array([[15, 12, 13],
[ 3, 0, 1],
[ 7, 4, 5]])

In [69]: out[1,1]
Out[69]:
array([[ 0, 1, 2],
[ 4, 5, 6],
[ 8, 9, 10]])

关于python - 在具有周期性边界的滑动窗口中查看网格单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43771514/

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