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

2024-05-18 23:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑二维阵列

>>> 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块。你知道吗

例如,非边界元素

>>> 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]])

当窗口接近但不环绕周期边界时查看。你知道吗

>>> 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]]]])

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


Tags: 函数fromview元素windowsasnprange
1条回答
网友
1楼 · 发布于 2024-05-18 23:41:45

只需使用^{}填充wrapping功能,然后使用Scikit's ^{}-

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]])

相关问题 更多 >

    热门问题