3

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

s += 使用可以用 cumsum 向量化,但总和的下限是有问题的。

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

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

我撬开了它一段时间,但什么也想不出来。

4

1 回答 1

1

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

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

更新:这是不对的。cumsums增量低于比率时,它不考虑归零。您可以使用导数找到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“Trues”块,但我不确定它是否会比你的循环更有效。

于 2012-12-13T03:15:18.900 回答