在python中,计算运行中值的最短方法是什么?

在python中,计算运行中值的最短方法是什么?,python,numpy,math,median,scipy.ndimage,Python,Numpy,Math,Median,Scipy.ndimage,我需要用python计算一个运行中位数。目前我是这样做的: med_y = [] med_x = [] for i in numpy.arange(240, 380, 1): med_y.append(numpy.median(dy[(dx > i)*(dx < i+20)])) med_x.append(i + 10) cs = numpy.cumsum(dy) y_20 = (cs[20:] - cs[:-20])/20.0 x_20 = dx[10:-10]

我需要用python计算一个运行中位数。目前我是这样做的:

med_y = []
med_x = []
for i in numpy.arange(240, 380, 1):

    med_y.append(numpy.median(dy[(dx > i)*(dx < i+20)]))
    med_x.append(i + 10)
cs = numpy.cumsum(dy)
y_20 = (cs[20:] - cs[:-20])/20.0
x_20 = dx[10:-10]

在站点包中预定义运行X函数也可以。

在编写问题后通过谷歌搜索显示信号处理函数medfilt,例如scipy.signal.medfilt,带有两个输入参数:数字列表和窗口大小

它在以下情况下工作:

  • 窗户大小参差不齐
  • 与边缘的距离大于(窗+1)/2
在边缘附近,它提供最小内窗/2。我猜原因是它最初是为了减少图像中的黑色错误像素,而您希望边缘是黑色的

例如:

from scipy.signal import medfilt 
values = [1,1,1,0,1,1,1,1,1,1,1,2,1,1,1,10,1,1,1,1,1,1,1,1,1,1,0,1]
print medfilt(values,7)
适用于值[4:-4],并为边提供min(值[:4])和min(值[-4:])。上述示例的输出为:

output = [0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0.] 
这是最短的:

from scipy.ndimage import median_filter
values = [1,1,1,0,1,1,1,1,1,1,1,2,1,1,1,10,1,1,1,1,1,1,1,1,1,1,0,1]
print median_filter(values, 7, mode='mirror')
并且它在边缘正确工作(或者您可以选择它在边缘的工作方式)

任何一般的运行X都是这样做的(运行标准偏差为例):

在上面,浮点输入类型很重要

有用链接:


好的,我用艰苦的方式了解了文档中“零填充”的含义。边缘处的行为是由于窗口超出数据范围时添加到窗口中的零。
import numpy
from scipy.ndimage.filters import generic_filter
values = numpy.array([0,1,2,3,4,5,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1]).astype('float')
print(generic_filter(values, numpy.std, size=7, mode='mirror'))