列表中的平滑激进值

我认为这是一个新问题,我们没有解决方案。我需要对数字列表中的一个非常大的值实施某种抑制。例如。


list = np.array([3, 3, 3, 15, 3, 3, 3])

我做了非常简单的实现,扼杀了这些值。到目前为止我尝试过的。


def smooth(x, window, threshold):

    for idx, val in enumerate(x):

        if idx < window:

            continue

        avr = np.mean(

            x[idx-window:idx])


        if abs(avr - val) > threshold:

            x[idx] = avr + threshold


print(smooth(list1, 3, 1))

# [3, 3, 3, 4, 3, 3, 3]

在这种情况下,一切正常,但再举一个例子,我需要以另一种方式平滑数据(例如高斯平滑)。


list = np.array([3, 3, 3, 15, 15, 15])

print(smooth(list, 3, 1))

# [3, 3, 3, 4, 4, 3]

因为window从左到右移动,我不知道norm下一个值。当然,我可以从两个方向评估这个数字的窗口,但只是想知道这样做的正确方法或常用技术。


小唯快跑啊
浏览 187回答 1
1回答

繁华开满天机

我建议不要自己实施一维过滤,因为在采用幼稚的方法时,您可能会在数据中引入伪像(如使用矩形过滤器形状,就像您在代码片段中所做的那样)。您不太可能像已经优化了几十年的现有实现一样快速地远程提出实现除非您出于自学的原因这样做,否则这是通过重新发明轮子浪费时间的典型示例而是利用丰富多样的现有实现,例如在 scipy 包中可用。你可以在这里找到一个很好的说明使用示例:平滑一维信号(Scipy Cookbook)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python