还是像这样的真正迭代算法不可矢量化?
s += 使用可以用 cumsum 向量化,但总和的下限是有问题的。
是否有一些奇特的方式来使用滞后或移位?
s = 0
for (time, usage) in timeseries:
s += usage
s = max(s-rate, 0)
new_timeseries[time] = s
我撬开了它一段时间,但什么也想不出来。
还是像这样的真正迭代算法不可矢量化?
s += 使用可以用 cumsum 向量化,但总和的下限是有问题的。
是否有一些奇特的方式来使用滞后或移位?
s = 0
for (time, usage) in timeseries:
s += usage
s = max(s-rate, 0)
new_timeseries[time] = s
我撬开了它一段时间,但什么也想不出来。
先放入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
“Trues”块,但我不确定它是否会比你的循环更有效。