Существует ли функция, аналогичная функции scipy.ndimageiform_filter или convolve (аналогичная проблема с Numpy двумерное скользящее среднее ), но среднее значение рассчитывается с использованием только значений во входном массиве (без учета числа заполнить значения для угловых и краевых ячеек). Аналогичная функция, в которой значение заполнения может быть установлено в np.nan, а полученное среднее значение рассчитывается как np.nanmean?
Мой исходный код перебирает массив, чтобы получить соседей и вычислить полученное среднее, но этот метод занимает слишком много времени. Я пробовал иiform_filter, или convolve, но результаты не те, которые мне нужны, поскольку результирующие значения углов и ребер слишком малы (из-за заполнения ребер 0).
Например, если у меня есть массив:
a = np.ones((4,5))
Вычисление среднего значения из движущегося массива 3x3 также должно привести к:
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
iform_filter дает:
uniform_filter(a, size=3, mode='constant', cval=0.0)
array([[0.44444444, 0.66666667, 0.66666667, 0.66666667, 0.44444444],
[0.66666667, 1. , 1. , 1. , 0.66666667],
[0.66666667, 1. , 1. , 1. , 0.66666667],
[0.44444444, 0.66666667, 0.66666667, 0.66666667, 0.44444444]])
Я попытался установить cval = np.nan, но результирующие значения краев ячейки - nan.
Для другого массива, b
array([[1., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
Я хочу получить массив, используя окно усреднения 3x3, как
array([[0.25 , 0.16666667, 0. ],
[0.16666667, 0.11111111, 0. ],
[0. , 0. , 0. ]])
Значения рассчитываются, как показано в этом
иллюстрация