我有一些3d时间序列数据。但他们有一些缺失值(np.nan)。 所以,我想插入它们。
示例:
x = [0, nan, 2, 3, 4, 5]
y = [0, nan, 2, 3, 4, 5]
z = [3, nan, 5, 6, 7, 8]
# I want
interp(1) -> [1, 1, 4]
我该如何计算?
我试图通过样条曲线逐个插入x,y和z。但我觉得这很奇怪。单独插值是奇怪还是数学上是正确的还是有任何解决方案?
如果单独计算,使用scipy非常容易:
fx = interpolate.interp1d(time, x, kind="cubic")
fy = interpolate.interp1d(time, y, kind="cubic")
fz = interpolate.interp1d(time, z, kind="cubic")
答案 0 :(得分:0)
根据您的评论,您似乎想要用两边的平均值替换nan值(即使您已经提到了样条方法)。所以这是一个简单的函数,以防在开始和结束时没有发生。 导入numpy为np
x = np.array([0, np.nan, 2, 3, 4, 5])
y = np.array([0, np.nan, 2, 3, 4, 5])
z = np.array([3, np.nan, 5, 6, 7, 8])
def nan_mean(v):
ind=np.where(np.isnan(v))[0]
v[ind]=(v[ind+1]+v[ind-1])/2
nan_mean(x)
nan_mean(y)
nan_mean(z)
这将返回您想要的值