我无法准确理解反射模式是如何处理阵列的。我有一个非常简单的数组:
import numpy as np
from scipy.ndimage.filters import uniform_filter
from scipy.ndimage.filters import median_filter
vector = np.array([[1.0,1.0,1.0,1.0,1.0],[2.0,2.0,2.0,2.0,2.0],[4.0,4.0,4.0,4.0,4.0],[5.0,5.0,5.0,5.0,5.0]])
print(vector)
[1.1。1。1。1。
〔2〕。2。2。2。2。
〔4〕。4。4。4。4。
〔5〕。5。5。5。5)]
应用窗口大小为3的均匀(平均)过滤器,我得到以下结果:
filtered = uniform_filter(vector, 3, mode='reflect')
print(filtered)
[1.33333333 1.33333333 1.33333333 1.33333333 1.33333333 1.33333333]
[2.33333333 2.33333333 2.33333333 2.33333333 2.33333333 2.33333333]
[3.666667 3.66666667 3.66666667 3.66666667 3.66666667 3.666666666 7]
[4.66666667 4.66666667 4.66666667 4.66666667 4.6666666 7]]
如果我试着用手重复这个练习,我就能得到这个结果。原始矩阵为绿色,窗口为橙色,结果为黄色。白色是“反射”观测值。
结果是:
但当我尝试4或5的窗口大小时,我无法复制结果。
filtered = uniform_filter(vector, 4, mode='reflect')
print(filtered)
[1.5 1.5 1.5 1.5 1.5 1.5]
[2.2。2。2。2。]
[3.三。三。三。三。]
[4.4。4。4。4。] ]
手工操作:
我得到:
如果窗口大小相等,如何处理它?但是无论如何,如果我尝试复制5号窗口的结果,并且模式反射,我也不能。尽管我认为这种行为类似于3号的。
最佳答案
假设一个轴上的数据是1 2 3 4 5 6 7 8
。下表显示了如何为每个模式扩展数据(假设cval=0
):
mode | Ext | Input | Ext
-----------+---------+------------------------+---------
'mirror' | 4 3 2 | 1 2 3 4 5 6 7 8 | 7 6 5
'reflect' | 3 2 1 | 1 2 3 4 5 6 7 8 | 8 7 6
'nearest' | 1 1 1 | 1 2 3 4 5 6 7 8 | 8 8 8
'constant' | 0 0 0 | 1 2 3 4 5 6 7 8 | 0 0 0
'wrap' | 6 7 8 | 1 2 3 4 5 6 7 8 | 1 2 3
对于偶数窗口大小,考虑大小为的窗口,然后不包括下边缘和右边缘。(可以使用
n
参数更改窗口的位置。)关于python - scipys ndimage过滤器的“反射”模式究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22669252/