我正在寻找一种快速有效的方法来计算一组数据的稳健、移动比例估计。我正在使用通常包含 3-400k 个元素的一维数组。直到最近我一直在处理模拟数据(没有灾难性的异常值),优秀的 Bottleneck 包中的 move_std 函数对我很有帮助。但是,当我过渡到嘈杂的数据时,std 不再表现得足够好,无法使用。
过去,我逐个元素地使用了一个非常简单的二重中间方差代码来处理表现不佳的分布问题:
def bwmv(data_array):
cent = np.median(data_array)
MAD = np.median(np.abs(data_array-cent))
u = (data_array-cent) / 9. / MAD
uu = u*u
I = np.asarray((uu <= 1.), dtype=int)
return np.sqrt(len(data_array) * np.sum((data_array-cent)**2 * (1.-uu)**4 * I)\
/(np.sum((1.-uu) * (1.-5*uu) * I)**2))
但是我现在使用的数组足够大,以至于速度非常慢。有谁知道提供这种估算器的软件包,或者对如何以快速有效的方式解决这个问题有任何建议?