1

文档链接: https ://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.maximum_filter1d.html#r4df4f294a847-2

文档中给出的示例是,

>>> maximum_filter1d([2, 8, 0, 4, 1, 9, 9, 0,1], size=3)
array([8, 8, 8, 4, 9, 9, 9, 9, 1])

我对该函数的理解是它在元素上执行滑动窗口,窗口大小为 k [对于给定的示例,它是 3]

这意味着,

第一个窗口 = max[2,8,0] => 8

第二个窗口 = max[8,0,4] => 8

第三个窗口 = 最大 [0,4,1] => 4

第 4 个窗口 = max[4,1,9] => 9

第 5 个窗口 = 最大 [1,9,9] => 9

第 6 个窗口 = max[9,9,0] => 9

第 7 个窗口 = max[9,0,1] => 9

8th window = max[0,1,2] => 0 [不确定,如何在边缘上对元素进行分组,但从文档中看,它默认使用“反射”模式,我不确定它如何改变原始模式大批]

总结一下问题,

  • 参数中的origin、cval、mode是什么意思maximum_filter1d
  • 工作如何maximum_filter1d

如果可能,请提供示例说明!

提前致谢!

祝你有美好的一天!

4

1 回答 1

1

边界条件

让我们以这个例子来阐述边界条件:

>>> input_arr = [1,0,6,1,9]
>>> output_arr = maximum_filter1d(input_array, size=3)
    array([1, 6, 6, 9, 9])

你之前的解释是正确的。但是,您不确定边界。它做了一些非常简单的事情,称为“反射”。让我解释一下:假设过滤器在开始,即过滤器窗口的中心是输入数组中的第一个元素。所以所以它是input_arr[0] = 1。现在我们有了左边界,这意味着 . 的左边没有任何东西input_arr[0]。但是,窗口的大小 = 3。因此我们在 的右侧有一个值1,即0。让我们称之为array([1,0]). 现在反映这个值1的是 reflected_array = array([0,1])。但是,窗口的大小为 3,因此过滤器将使其成为array([0,1,0])。因此,实际上第一个过滤窗口是

第一个窗口 = 最大 [0,1,0] => 1

同样,这种反射也适用于最后一个窗口。在这种情况下,

最后一个窗口 = max[1,9,1] => 9

您已经知道其余的窗口,它是如何工作的。

原产地条件

让我们举同样的例子。我们知道 origin 的默认值为 0,这将导致与以前相同:

>>> input_arr = [1,0,6,1,9]
>>> output_arr = maximum_filter1d(input_array, size=3, origin=0)
    array([1, 6, 6, 9, 9])

在我们的例子中,origin 可以取三个可能的值,因为过滤器大小是 3。已知的默认情况origin=0如我上面解释的那样工作。其他可能的值是origin=-1,将窗口向右移动和origin=1,将窗口向左移动。

让我们用一个新的输入数组(为了清楚起见而改变)的例子来看看这个origin=-1例子。

>>> input_arr = [1,0,2,6,9]
>>> output_arr = maximum_filter1d(input_array, size=3, origin=-1)
    array([2, 6, 9, 9, 9])

在这种情况下,边界反映为input_arr[1] = 0。即,array([0,2])反映到array([2,0])。因此,2 在第一个窗口之前。

第一个窗口 = max[2,1,0] => 2用于窗口中心input_arr[0] = 1

第二个窗口 = max[0,2,6] => 6窗口中心在input_arr[1] = 0

请注意,在第二个窗口中,输入数组的中心向右移动了 1。

可以考虑类似的逻辑origin=1

其余的

cval :这只允许您在开始之前填充值。在这种情况下,它不会使用这个特殊的边界条件。您可以输入任何值,您的过滤器会将其与边界值进行比较。

模式:我们看到默认是“反射”。您可以通过更改模式来更改此边界条件。

建议

自己尝试针对不同场景的不同案例,以进一步巩固这一概念。我尽我所能解释。我认为当您自己尝试更多案例并玩弄价值观时,您会学到更多。

于 2021-03-25T22:19:36.260 回答