均匀地重新采样位置的时间序列

3 投票
1 回答
1712 浏览
提问于 2025-05-10 15:45

在地球科学中,常常会遇到这样的问题:我有一组时间序列的数据,记录了位置(经度和纬度)。不过,这些数据在时间上并不是均匀分布的。时间采样的情况如下:

    t_diff_every_position = [3.99, 1.00, 3.00, 4.00, 3.98, 3.99, ... ]

而且我在每个时间点都有对应的位置:

   lat = [77.0591,  77.0547,  77.0537, 74.6766,  74.6693,  74.6725, ... ]
   lon = [-135.2876, -135.2825, -135.2776, -143.7432, -143.7994,
   -143.8582, ... ]

我想要重新采样这些位置,使得数据集在时间上是均匀分布的。所以我希望时间向量看起来像这样:

    t_resampled = [4.00, 4.00, 4.00, 4.00, 4.00, 4.00, ... ]

并且通过插值来获得对应的位置。

这些位置并不是单调变化的,所以我不能使用scipy中常用的重新采样和插值函数。位置与时间的关系

有没有人知道该怎么做呢?

相关文章:

  • 暂无相关问题
暂无标签

1 个回答

4

一种方法是分别对经度和纬度进行插值处理。下面是一些模拟数据的例子。

假设我们有100个经度(lon)、纬度(lat)和时间戳(t

>>> t
array([ 0.        ,  1.09511126,  1.99576514,  2.65742629,  3.35929893,
        4.1379694 ,  5.55703942,  6.52892196,  7.64924527,  8.60496239])

这些坐标绘制出的路径大概是这样的:

enter image description here

我们使用scipy库中的interp1d函数,分别对纬度和经度进行线性插值:

from scipy.interpolate import interp1d
f_lon = interp1d(t, lon)
f_lat = interp1d(t, lat)

然后我们创建一个规则的时间戳数组,[1, 2, 3, ..., 100],并重新采样我们的纬度和经度:

reg_t = np.arange(0, 99)
reg_lon = f_lon(reg_t)
reg_lat = f_lat(reg_t)

下面的图展示了在规则间隔np.arange(0, 99, 5)上进行插值的结果。这个间隔比你想要的要粗,因为如果使用更细的间隔,你会发现每个图中实际上有两个函数,这样就很难看出来。

enter image description here

撰写回答