重塑数据样本

时间:2017-05-14 15:22:30

标签: python numpy

我有两个数组中的数据对样本。例如:

times = [0, 1, 3, 3.5, 5, 6]
values = [1, 2, 3, 4, 5, 6]

所以在时间0,值为1,在时间1,它是2,依此类推。正如您所看到的,时间值不在常规时间距离内(尽管在所有情况下都按升序排序)。我正在寻找一种有效的方法将上述内容转换为

times1 = [0, 1, 2, 3, 4, 5, 6]
values = [1, 2, 2.5, 3, 4.333, 5,  6]

这些值是根据中间值的该图计算的:

enter image description here

当然,我可以创建一个循环来查找这些值并将它们填充到目标数组中。但是我想知道numpy是否有“做到”的事情。

注意:This与我想要的相似(虽然有点琐碎),所以我猜没有任何开箱即用的东西。但是谁知道呢。

1 个答案:

答案 0 :(得分:1)

使用scipy,您可以使用interp1d

from scipy.interpolate import interp1d    
f = interp1d(times, values)

f(times1)
Out: 
array([ 1.        ,  2.        ,  2.5       ,  3.        ,  4.33333333,
        5.        ,  6.        ])

使用pandas,这也是可能的:

ser = pd.Series(values, index=times)
ser2 = pd.Series(index=times1)

ser.combine_first(ser2).interpolate(method='index').reindex(ser2.index)
Out: 
0    1.000000
1    2.000000
2    2.500000
3    3.000000
4    4.333333
5    5.000000
6    6.000000
dtype: float64

combine_first取两个索引的并集。插值是完成工作的主要方法。由于您对索引进行线性插值,因此需要传递method='index'