Numpy Двумерное Скользящее Среднее

У меня есть 2D массив numpy. Я хочу взять среднее значение n ближайших записей к каждой записи, так же как скользящее среднее по одномерному массиву. Что самый чистый способ сделать это?

1 ответов


Это аналогичная концепция применения фильтр до изображения.

к счастью, scipy.ndimage.filters имеет кучу функций для этого. Один вы после scipy.ndimage.uniform_filter.

можно использовать так:

a
=> 
array([[  0.,   1.,   2.,   3.,   4.],
       [  5.,   6.,   7.,   8.,   9.],
       [ 10.,  11.,  12.,  13.,  14.],
       [ 15.,  16.,  17.,  18.,  19.],
       [ 20.,  21.,  22.,  23.,  24.]])

uniform_filter(a, size=3, mode='constant')
=> 
array([[  1.33333333,   2.33333333,   3.        ,   3.66666667,          2.66666667],
       [  3.66666667,   6.        ,   7.        ,   8.        ,          5.66666667],
       [  7.        ,  11.        ,  12.        ,  13.        ,          9.        ],
       [ 10.33333333,  16.        ,  17.        ,  18.        ,         12.33333333],
       [  8.        ,  12.33333333,  13.        ,  13.66666667,          9.33333333]])

если вы хотите фильтр 5x5, используйте size=5. The mode опция управляет обработкой краев. Вы не указали, как вы хотите обрабатывать края. В этом примере режим "constant" означает, что он обрабатывает каждый элемент за пределами массива как постоянное значение 0 (0-это значение по умолчанию, которое можно переопределить).