我有一个数字数组,每个数字对应一个事件和事件发生的时间。例如,
ev = [0,14,23,53,3]
时间= [0,0.4,0.75,0.9,1.1]
想象一下ev与时间成为一个(右连续)阶梯函数,它改变时间数组中值的值。现在通过重新采样,我的意思是定义一个新的时间值数组,并在这些时间查找ev函数的值。我想在均匀间隔的时间数组下重新采样变量ev。例如,如果t1是一个均匀间隔的数组,则ev1是我需要的相应事件列表。
t1 = [0,0.2,0.4,0.6,0.8,1,1.2]
ev1 = [0,0,14,14,23,53,3]
是否可以在Python中对事件数组进行重新采样?有直接命令吗?谢谢。
答案 0 :(得分:4)
您可以np.searchsorted
与side='right
一起使用time
查找小于新时间的最后一项的索引,然后使用它来获取{ev
中的值1}}数组:
>>> np.take(ev, np.searchsorted(time, t1, side='right')-1)
array([ 0, 0, 14, 14, 23, 53, 3])
如果您首先将ev
转换为numpy数组,那么花哨的限制可能更具可读性:
>>> ev = np.array(ev)
>>> idx = np.searchsorted(time, t1, side='right')-1
>>> ev[idx]
array([ 0, 0, 14, 14, 23, 53, 3])
答案 1 :(得分:2)
我确信在纯numpy
中有一种灵活的排序方式可以做到这一点,但无论如何这里都是pandas
方式。
>>> ev = [0, 14, 23, 53, 3]
>>> time = [0, 0.4, 0.75, 0.9, 1.1]
>>> ser = pd.Series(ev, index=time)
>>> ser
0.00 0
0.40 14
0.75 23
0.90 53
1.10 3
dtype: int64
>>> ser.reindex(np.arange(0, 1.4, 0.2), method='ffill')
0.0 0
0.2 0
0.4 14
0.6 14
0.8 23
1.0 53
1.2 3
dtype: int64