Python 时间插值
我刚学Python,希望我问得对。
我有一大堆数据,想要每秒插值一次,把缺失的地方用合适的经纬度填上:
Lat Long Time
-87.10 30.42 16:38:49
.
.
.
-87.09 30.40 16:39:22
.
.
.
-87.08 30.40 16:39:30
所以我想每秒生成一个新的经纬度。
我已经画出了对应的经纬度,现在想用插值的数据来填补那些空缺的地方,可能会有一些点。
1 个回答
0
如果线性插值对你来说足够用了,你可以使用 numpy.interp
这个函数。你需要准备一个时间数组,用来进行插值,同时还要有从输入文件中读取的时间和经纬度数据点(注意,时间数据必须是递增的,所以你可能需要先对数据进行排序)。
要读取文件中的数据,你可以使用 numpy.loadtxt
这个函数,并添加一个转换器,把时间转换成递增的数字:
import numpy as np
from matplotlib.dates import strpdate2num
lon, lat, time = np.loadtxt('data.txt', skiprows=1,
converters={2:strpdate2num('%H:%M:%S')}, unpack=True)
接下来,你可以使用插值函数来计算经度和纬度的值。传给 linspace
函数的最后一个参数是你想要在插值数据中得到的点的数量。
interp_time = np.linspace(time[0], time[-1], 100)
interp_lon = np.interp(interp_time, time, lon)
interp_lat = np.interp(interp_time, time, lat)
如果你需要比线性插值更复杂的东西,可以使用 scipy.interpolation
中的几个功能。