我未能准确理解反射模式如何处理我的数组。我有这个非常简单的数组:
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] [2.33333333 2.33333333 2.33333333 2.33333333 2.33333333] [3.66666667 3.66666667 3.66666667 3.66666667 3.66666667] [4.66666667 4.66666667 4.66666667 4.66666667 4.66666667]]
如果我尝试手动复制练习,我可以得到这个结果。原始矩阵为绿色,窗口为橙色,结果为黄色。怀特被反映出来了#34;观察结果。
结果是:
但是当我尝试4或5的窗口大小时,我无法复制结果。
filtered = uniform_filter(vector, 4, mode='reflect')
print(filtered)
[[1.5 1.5 1.5 1.5 1.5] [2. 2. 2. 2. 2.] [3. 3. 3. 3. 3.] [4. 4. 4. 4. 4.]]
手工完成:
我得到了:
如果窗口大小均匀,窗口如何处理?但无论如何,如果我尝试复制大小为5的窗口的结果,模式反映我也不能。即使我认为这种行为类似于3号的行为。
答案 0 :(得分:43)
假设一个轴上的数据为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
,请考虑大小为n+1
的窗口,然后不要包含下边缘和右边缘。 (可以使用origin
参数更改窗口的位置。)