我无法准确理解反射模式是如何处理阵列的。我有一个非常简单的数组:

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/

10-12 22:48