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]
线性回归插值

