边界条件
让我们以这个例子来阐述边界条件:
>>> 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 :这只允许您在开始之前填充值。在这种情况下,它不会使用这个特殊的边界条件。您可以输入任何值,您的过滤器会将其与边界值进行比较。
模式:我们看到默认是“反射”。您可以通过更改模式来更改此边界条件。
建议
自己尝试针对不同场景的不同案例,以进一步巩固这一概念。我尽我所能解释。我认为当您自己尝试更多案例并玩弄价值观时,您会学到更多。