在1D阵列上插入2d数据(速度(x,y))(时间)

时间:2017-10-30 22:33:44

标签: python numpy scipy interpolation

随着时间的推移,我有一份速度列表。有没有办法在该列表的大小(时间)内插入该数据? 为了更清楚,这里有一个简单的代码:

import numpy as np
v_list = []
v_time1 = [[1,1], [2,2]] #2D
v_time2 = [[0,1], [3,4]] #2D
v_list.append(v_time1,v_time2)
time = np.size(v_list) #1D

我的目标是随着时间的推移插入v_list中包含的数据,因此我可以"调用"它取决于所需的时间。像这样:

v_desired_time = interpolated_velocities(desired_time) #2D

干杯!

1 个答案:

答案 0 :(得分:2)

您可以使用scipy.interpolate.interp1d。它可以处理函数的数值。

例如,

In [35]: from scipy.interpolate import interp1d

以下是您的测量结果。我将它们放入一个名为v的numpy数组中:

In [36]: v_time1 = [[1,1], [2,2]] #2D

In [37]: v_time2 = [[0,1], [3,4]] #2D

In [38]: v = np.array([v_time1, v_time2])

In [39]: v
Out[39]: 
array([[[1, 1],
        [2, 2]],

       [[0, 1],
        [3, 4]]])

t包含时间值:

In [40]: t = np.arange(v.shape[0])

In [41]: t
Out[41]: array([0, 1])

创建插补器。默认情况下,它使用线性插值:

In [42]: f = interp1d(t, v, axis=0)

在几个时间值检查插补器的值:

In [43]: f(0)
Out[43]: 
array([[ 1.,  1.],
       [ 2.,  2.]])

In [44]: f(0.5)
Out[44]: 
array([[ 0.5,  1. ],
       [ 2.5,  3. ]])

In [45]: f(1)
Out[45]: 
array([[ 0.,  1.],
       [ 3.,  4.]])