python - 如何在时间序列数据中找到最大增长率?
问题描述
我想知道在给定时间段内找到最大增长率的算法。
假设我们有八个(N)个数据点如下,
list_x = [84,59,52,71,62,82,45,50]
def find_max(list_x):
# return the L index, H index, ratio
# take list_x as an example, L index: 3(52), H index: 6(82), ratio: 82/52
# should return (3, 6, 1.57)
return L,H,dy/dx
一种粗暴的方法是通过 O(N*N),存储比率字典,然后按比率排序。任何有效的算法?谢谢
解决方案
正如我在评论中提到的,看起来您正在寻找H/L
而不是dy/dh
因为您的预期结果是(3, 6, 1.57)
. 假设您确实想要这样做,H/L
那么您可以尝试以下操作:
def max_result(arr):
max_growth, cur_min, cur_min_idx = float('-inf'), float('inf'), -1
res_l = res_h = float('-inf')
for i, val in enumerate(arr):
if val / cur_min > max_growth:
max_growth = val / cur_min
res_l, res_h = cur_min_idx, i
if val < cur_min:
cur_min, cur_min_idx = val, i
return res_l + 1, res_h + 1, round(max_growth, 2)
这里的复杂性是O(N)
推荐阅读
- python - 如何防止登录页面默认为功能的除外部分?
- visual-c++ - Visual Studio 命令提示符无法识别 ias
- r - R中的似然比检验
- java - 使用表键映射一对多
- amazon-web-services - AWS SageMaker S3 os.listdir() 访问被拒绝
- javascript - 在 JavaScript 中将报价数据转换为 1 分钟 OHLC(开盘价、最高价、最低价、收盘价)?
- javascript - 动画固定元素
- c# - 在 Web API 项目中使用 DLL
- parsing - 如何将 ITranslationUnit 写入文件
- python - 用Python程序(urllib,request)保存网页信息和通过浏览器保存有什么区别