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-это значение по умолчанию, которое можно переопределить).