Как именно работает «отражающий» режим для фильтров scipys ndimage?

Я не понимаю, как именно режим отражения обрабатывает мои массивы. У меня есть этот очень простой массив:

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.6666666766 66

Если я попытаюсь повторить упражнение вручную, я смогу достичь этого результата. Исходная матрица зеленого цвета, окно оранжевого цвета и результат желтого цвета. Белые являются "отраженными" наблюдениями.

Результат:

Но когда я пробую окно размером 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.

Ответы на вопрос(1)

Ваш ответ на вопрос