如何用numpy来渲染这个简单的算法?

时间:2012-12-13 02:55:51

标签: python numpy time-series vectorization

或者像这样的真正迭代算法是不可矢量化的?

s + =用法可以用cumum进行矢量化,但总和的最低限度是有问题的。

是否有一些奇特的方法来使用滞后或转移?

s = 0
for (time, usage) in timeseries:
    s += usage
    s = max(s-rate, 0)
    new_timeseries[time] = s

我盯着它看了一会但却无法想出任何东西。

1 个答案:

答案 0 :(得分:1)

首先将timeseries放入数组中。我们假设timeseries的值为my_array。然后,

import numpy as np
s = np.cumsum(my_array) - rate
s[s < 0] = 0
new_timeseries = s 

更新:这是不对的。当cumsum增量低于费率时,它不会将s归零。您可以使用衍生工具找到cumsum低于费率的点:

In [1]: dd = np.diff(np.cumsum(my_array))
In [2]: dd < rate
Out[3]: array([ True, False, True, False, False, True, True,  
                True, True, False, True, False, True, False,
                True, True, True, False, False], dtype=bool)

但是,这不会“重置”cumsum。人们可以沿着这些指数进行搜索并在“真实”块中进行cumsum,但我不确定它是否比你的循环更有效。