Python 时间插值

0 投票
1 回答
3937 浏览
提问于 2025-04-18 17:57

我刚学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 中的几个功能。

撰写回答