或者像这样的真正的迭代算法是不可向量化的?
的+=使用率可以用cumsum向量化,但是sum上的下限是有问题的。
有没有什么奇妙的方法来使用lags或shifting呢?
s = 0
for (time, usage) in timeseries:
s += usage
s = max(s-rate, 0)
new_timeseries[time] = s我仔细研究了一会儿,但什么也想不出来。
发布于 2012-12-13 11:15:19
首先将timeseries放入数组中。让我们假设timeseries的值是my_array。然后,
import numpy as np
s = np.cumsum(my_array) - rate
s[s < 0] = 0
new_timeseries = s 更新:这是不正确的。当s的增量低于该速率时,它不会考虑将cumsum置零。您可以使用导数找到cumsum低于rate的点:
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。一个人可以沿着这些索引搜索并在“Trues”块中执行cumsum,但我不确定它是否会比您的循环更有效。
https://stackoverflow.com/questions/13852214
复制相似问题