我有两个数组中的数据对样本。例如:
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]
这些值是根据中间值的该图计算的:
当然,我可以创建一个循环来查找这些值并将它们填充到目标数组中。但是我想知道numpy是否有“做到”的事情。
注意:This与我想要的相似(虽然有点琐碎),所以我猜没有任何开箱即用的东西。但是谁知道呢。
答案 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'
。