按时均匀地重新采样时间序列

时间:2015-11-19 15:53:55

标签: python interpolation resampling

正如地球科学中经常发生的那样,我有一系列时间位置(lon,lat)。时间序列的时间间隔不均匀。时间采样如下:

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

我和每个t都有相关的位置:

   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中通常的重新采样和插值函数。 Positions with time

有没有人知道如何实现这一目标?

1 个答案:

答案 0 :(得分:2)

一种方法是分别插入经度和纬度。以下是一些模拟数据的示例。

假设我们有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