或者像这样的真正迭代算法是不可矢量化的?
s + =用法可以用cumum进行矢量化,但总和的最低限度是有问题的。
是否有一些奇特的方法来使用滞后或转移?
s = 0
for (time, usage) in timeseries:
s += usage
s = max(s-rate, 0)
new_timeseries[time] = s
我盯着它看了一会但却无法想出任何东西。
答案 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
,但我不确定它是否比你的循环更有效。