首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何用numpy向量化这个简单的算法?

我如何用numpy向量化这个简单的算法?
EN

Stack Overflow用户
提问于 2012-12-13 10:55:51
回答 1查看 211关注 0票数 3

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

的+=使用率可以用cumsum向量化,但是sum上的下限是有问题的。

有没有什么奇妙的方法来使用lags或shifting呢?

代码语言:javascript
复制
s = 0
for (time, usage) in timeseries:
    s += usage
    s = max(s-rate, 0)
    new_timeseries[time] = s

我仔细研究了一会儿,但什么也想不出来。

EN

回答 1

Stack Overflow用户

发布于 2012-12-13 11:15:19

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

代码语言:javascript
复制
import numpy as np
s = np.cumsum(my_array) - rate
s[s < 0] = 0
new_timeseries = s 

更新:这是不正确的。当s的增量低于该速率时,它不会考虑将cumsum置零。您可以使用导数找到cumsum低于rate的点:

代码语言:javascript
复制
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,但我不确定它是否会比您的循环更有效。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13852214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档