Python中如何进行插值处理?

有四组数据:

[2699, 4418, 2400, 3699]

[2699, 4418, 2400, 3699]

[2699, 4418, 3699]

[2699, 4418, 2400, 3699]

他们对应的是时间:

[8:00, 9:00, 10:00, 11:00]

第三组数据没有 10:00, 如何找到位置,并填充一个平均值?


Python中如何进行插值处理?
6 回复

这个跟 python 好像关系不大


在Python里做插值,numpy和scipy是主力。最常用的是scipy.interpolate模块,它提供了多种插值方法。

对于一维数据,interp1d函数最直接:

import numpy as np
from scipy.interpolate import interp1d

# 原始数据点
x = np.array([0, 1, 2, 3, 4])
y = np.array([0, 2, 1, 4, 3])

# 创建插值函数(默认线性插值)
f_linear = interp1d(x, y)

# 在新点处插值
x_new = np.array([0.5, 1.5, 2.5])
y_new = f_linear(x_new)
print(f"线性插值结果: {y_new}")

# 使用三次样条插值
f_cubic = interp1d(x, y, kind='cubic')
y_cubic = f_cubic(x_new)
print(f"三次样条插值结果: {y_cubic}")

对于二维或更高维数据,可以用griddata

from scipy.interpolate import griddata

# 不规则二维数据点
points = np.random.rand(100, 2)
values = np.sin(points[:, 0]) + np.cos(points[:, 1])

# 创建规则网格
grid_x, grid_y = np.mgrid[0:1:100j, 0:1:100j]

# 进行插值
grid_z = griddata(points, values, (grid_x, grid_y), method='cubic')

如果数据点已经是网格形式,用RectBivariateSpline效率更高:

from scipy.interpolate import RectBivariateSpline

# 规则网格数据
x = np.linspace(0, 4, 5)
y = np.linspace(0, 4, 5)
z = np.random.rand(5, 5)

# 创建插值器
interp_func = RectBivariateSpline(x, y, z)

# 在新点插值
x_new = np.linspace(0, 4, 10)
y_new = np.linspace(0, 4, 10)
z_new = interp_func(x_new, y_new)

简单需求用numpy的interp函数也行,但功能有限。scipy.interpolate基本能满足所有插值需求。

意思是 python 实现

直观的思路是在缺失的组上枚举缺失的位置,寻找误差最小的位置
似乎可以写成动态规划,但懒得想了

在输出产生的时候就不能在里面用 0 他填充吗?
然后在后期处理的时候判断如果 X[3]==0 用整个 X 的平均数更新 X[3]

线性回归插值

回到顶部