列表中的平滑积极值

问题描述 投票:0回答:1

我认为这是一个新问题,我们没有解决方案。我需要在数字列表中为一个非常大的值实现某种窒息。对于前者

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]

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

list = np.array([3, 3, 3, 15, 15, 15])
print(smooth(list, 3, 1))
# [3, 3, 3, 4, 4, 3]

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

python algorithm numpy collections
1个回答
2
投票

我建议不要自己实施一维过滤,因为

  • 在采用天真的方法时,您可能会在您的数据中引入工件(如使用像您在代码片段中所做的矩形滤镜形状)。
  • 您不太可能像现有实施一样快速地实现远程实施,现有实施已经过几十年的优化
  • 除非你是出于自学考虑的原因,否则它是一个典型的例子,通过重新发明轮子来浪费你的时间

而是利用丰富多样的现有实现,例如,可用的。在scipy包中。你可以在这里找到一个很好地说明的用法示例:Smoothing of a 1D signal (Scipy Cookbook)

© www.soinside.com 2019 - 2024. All rights reserved.