问题描述
我无法准确理解反射模式如何处理我的数组。我有这个非常简单的数组:
I'm failing to understand exactly how the reflect mode handles my arrays. I have this very simple array:
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。]]
[[ 1. 1. 1. 1. 1.] [ 2. 2. 2. 2. 2.] [ 4. 4. 4. 4. 4.] [ 5. 5. 5. 5. 5.]]
应用均匀(均值)滤波器窗口大小为3我得到以下内容:
Applying a uniform (mean) filter with a window size of 3 I get the following:
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]]
[[ 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]]
如果我尝试手工复制练习,我可以得到这个结果。原始矩阵为绿色,窗口为橙色,结果为黄色。白色是反映的观察结果。
If I try to replicate the exercise by hand I can get to this result. Original matrix in green, window in orange and result in yellow. White are "reflected" observations.
结果是:
但是当我尝试4或5的窗口大小时,我无法复制结果。
But when I try a window size of 4 or 5 I fail to be able to replicate the results.
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.]]
[[ 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的行为。
How is the window handled if its size is even? But anyway, If I try to replicate the results of a window of size 5 and mode reflect I cant either. Even though I would think the behavior is analogous to that of size 3.
推荐答案
假设一个轴上的数据是 1 2 3 4 5 6 7 8
。下表显示了如何为每种模式扩展数据(假设 cval = 0
):
Suppose the data in one axis is 1 2 3 4 5 6 7 8
. The following table shows how the data is extended for each mode (assuming 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
参数更改窗口的位置。)
For an even window size n
, consider the window of size n+1
, and then don't include the lower and right edges. (The position of the window can be changed by using the origin
argument.)
这篇关于“如何反映”究竟是什么? scipys ndimage过滤器的模式工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!