如何解决如何对某些NaN表示缺少条目的数据应用Butterwoth过滤?
我想将Butterworth过滤应用于某些有辍学的时间序列。我使用python / numpy / scipy。我很清楚Python中实现的Butterworth过滤器。
在我的输入数组中,辍学用一些np.nan
值表示。看来,即使我只有1个nan值,Butterworth过滤器的整个输出也就只有nan(示例是从sosfiltfilt的scipy文档改编而成):
from scipy.signal import sosfiltfilt,butter
import matplotlib.pyplot as plt
import numpy as np
n = 201
t = np.linspace(0,1,n)
np.random.seed(123)
x = 1 + (t < 0.5) - 0.25*t**2 + 0.05*np.random.randn(n)
x[24] = np.nan
sos = butter(4,0.125,output='sos')
y = sosfiltfilt(sos,x)
any_real_output = np.logical_not(np.isnan(y)).any()
print("it is {} that the filtered signal has any real output".format(any_real_output))
产生:it is False that the filtered signal has any real output
。
我认为这是有道理的,因为我对这些过滤器的浅浅理解是,它们使用“广泛地”围绕每个点的数据(即使实际中取决于过滤器也来自整个时间序列)来过滤每个点。 / p>
因此,我的问题是:是否可以/如何对缺少条目(通常由某些nan表示)的数据应用Butterworth过滤(或类似方法)?有没有一种“干净”的方法来做到这一点,而只是忽略了难点?如果没有,您将如何建议过滤这样的时间序列?
注意:
-
我知道在当前情况下我可以执行线性插值,但是我的情况更加复杂,因此我无法使用这种简单的方法来“修补” nan值
-
我可以尝试应用一些“虚拟替换”,例如0,但是在这种情况下,这会导致滤波后的输出出现一些非自然的振荡。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。