使用Python中的预定义索引重新采样数组

时间:2014-01-30 17:23:10

标签: python arrays numpy resampling

我有一个数字数组,每个数字对应一个事件和事件发生的时间。例如,

  

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中对事件数组进行重新采样?有直接命令吗?谢谢。

2 个答案:

答案 0 :(得分:4)

您可以np.searchsortedside='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