我认为这是一个新问题,我们没有解决办法。我需要对一个数字列表中的一个非常大的值实施某种扼杀。例如
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
。当然,我可以从两个方向评估这个数字的窗口,但只是想知道正确的方法,或常见的技术。你知道吗
我建议不要自己实现1D过滤,因为
取而代之的是利用丰富多样的现有实现,例如在scipy包中。您可以在这里找到一个很好的示例:Smoothing of a 1D signal (Scipy Cookbook)
相关问题 更多 >
编程相关推荐