maximum_filter1d 在 scipy 中如何工作? cval、origin、mode参数如何影响它?
How does maximum_filter1d work in scipy? How does cval, origin, mode parameter affect it?
文档中给出的例子是,
>>> maximum_filter1d([2, 8, 0, 4, 1, 9, 9, 0,1], size=3)
array([8, 8, 8, 4, 9, 9, 9, 9, 1])
我对该函数的理解是,它在 window 大小为 k 的元素上执行滑动 window [对于给定的示例,它是 3]
这意味着,
1st window = max[2,8,0] => 8
第二个 window = 最大[8,0,4] => 8
3th window = max[0,4,1] => 4
4th window = max[4,1,9] => 9
5th window = max[1,9,9] => 9
第 6 window = 最大值[9,9,0] => 9
7th window = max[9,0,1] => 9
8th window = max[0,1,2] => 0 [不确定,如何在边上对元素进行分组,但从文档来看,它使用 "reflect" 默认模式,我不确定它是如何改变原始数组的]
总结问题,
- origin,cval,mode在
maximum_filter1d
参数中是什么意思?
maximum_filter1d
是如何工作的?
如果可能,请举例说明!
提前致谢!
祝你有愉快的一天!
边界条件
让我们以这个例子来阐述边界条件:
>>> input_arr = [1,0,6,1,9]
>>> output_arr = maximum_filter1d(input_array, size=3)
array([1, 6, 6, 9, 9])
您之前的解释是正确的。但是,您不确定边界。它做了一些非常简单的事情,称为 'reflect'。让我解释一下:
假设过滤器位于开头,即过滤器的中心 window 是输入数组中的第一个元素。因此它是input_arr[0] = 1
。现在我们有了左边界,这意味着 input_arr[0]
的左边没有任何东西。但是,window 的大小为 3。因此我们在 1
的右边有一个值,即 0
。
我们称之为 array([1,0])
。现在沿着值 1
反映这一点是
reflected_array = array([0,1])
。但是,window 的大小为 3,因此过滤器会使它成为 array([0,1,0])
。因此,实际上第一个过滤器 window 将是
1st window = max[0,1,0] => 1
同样,这种反射对最后一个 window 也有效。在这种情况下,
最后一个 window = max[1,9,1] => 9
剩下的windows你已经知道了,它是如何工作的。
原始条件
我们举同样的例子。我们知道 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
,它将 window 向右移动,origin=1
将 window 向左移动。
让我们以 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 在第一个 window.
之前
1st window = max[2,1,0] => 2 for window center在 input_arr[0] = 1
2nd window = max[0,2,6] => 6 for window center在 input_arr[1] = 0
请注意,在第二个 window 中,输入数组的中心向右移动了 1。
对于origin=1
也可以想到类似的逻辑
剩余
cval :这只允许您在开始之前填充值。在这种情况下,它不会使用这种特殊的边界条件。您可以输入任何值,您的过滤器会将其与边界值进行比较。
模式:我们看到默认是'reflect'。您可以通过更改模式来更改此边界条件。
建议
自己尝试不同场景下的不同案例,进一步巩固这个概念。我尽我所能解释。我想当你自己尝试更多案例并玩弄价值观时,你会学到更多。
文档中给出的例子是,
>>> maximum_filter1d([2, 8, 0, 4, 1, 9, 9, 0,1], size=3)
array([8, 8, 8, 4, 9, 9, 9, 9, 1])
我对该函数的理解是,它在 window 大小为 k 的元素上执行滑动 window [对于给定的示例,它是 3]
这意味着,
1st window = max[2,8,0] => 8
第二个 window = 最大[8,0,4] => 8
3th window = max[0,4,1] => 4
4th window = max[4,1,9] => 9
5th window = max[1,9,9] => 9
第 6 window = 最大值[9,9,0] => 9
7th window = max[9,0,1] => 9
8th window = max[0,1,2] => 0 [不确定,如何在边上对元素进行分组,但从文档来看,它使用 "reflect" 默认模式,我不确定它是如何改变原始数组的]
总结问题,
- origin,cval,mode在
maximum_filter1d
参数中是什么意思? maximum_filter1d
是如何工作的?
如果可能,请举例说明!
提前致谢!
祝你有愉快的一天!
边界条件
让我们以这个例子来阐述边界条件:
>>> input_arr = [1,0,6,1,9]
>>> output_arr = maximum_filter1d(input_array, size=3)
array([1, 6, 6, 9, 9])
您之前的解释是正确的。但是,您不确定边界。它做了一些非常简单的事情,称为 'reflect'。让我解释一下:
假设过滤器位于开头,即过滤器的中心 window 是输入数组中的第一个元素。因此它是input_arr[0] = 1
。现在我们有了左边界,这意味着 input_arr[0]
的左边没有任何东西。但是,window 的大小为 3。因此我们在 1
的右边有一个值,即 0
。
我们称之为 array([1,0])
。现在沿着值 1
反映这一点是
reflected_array = array([0,1])
。但是,window 的大小为 3,因此过滤器会使它成为 array([0,1,0])
。因此,实际上第一个过滤器 window 将是
1st window = max[0,1,0] => 1
同样,这种反射对最后一个 window 也有效。在这种情况下,
最后一个 window = max[1,9,1] => 9
剩下的windows你已经知道了,它是如何工作的。
原始条件
我们举同样的例子。我们知道 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
,它将 window 向右移动,origin=1
将 window 向左移动。
让我们以 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 在第一个 window.
1st window = max[2,1,0] => 2 for window center在 input_arr[0] = 1
2nd window = max[0,2,6] => 6 for window center在 input_arr[1] = 0
请注意,在第二个 window 中,输入数组的中心向右移动了 1。
对于origin=1
剩余
cval :这只允许您在开始之前填充值。在这种情况下,它不会使用这种特殊的边界条件。您可以输入任何值,您的过滤器会将其与边界值进行比较。
模式:我们看到默认是'reflect'。您可以通过更改模式来更改此边界条件。
建议
自己尝试不同场景下的不同案例,进一步巩固这个概念。我尽我所能解释。我想当你自己尝试更多案例并玩弄价值观时,你会学到更多。