首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在价值超过阈值时有效地找到时间

如何在价值超过阈值时有效地找到时间
EN

Stack Overflow用户
提问于 2020-01-14 18:53:29
回答 2查看 93关注 0票数 0

有一个(time, count)值列表的图形可视化,其中x轴上的时间和y轴上的计数。

代码语言:javascript
运行
复制
 list_1 = [(1, 50000), (2,40000), (3,20000), (4,10000), (5, 5000), (6, 3000), (7,500), (8, 10), (9,100), (10,2000), (11,5000),(11,8000),(12,10000), (13,20000)]

我的目的是找出计数增加超过或等于limit = 20000的时间,即沿增加坡面的(13,20000),而不是减少坡面。

如需更多信息,请查找图表

我写了一个伪代码,它做同样的事情,但没有有效的方式。

但是有一个约束是list_1不是固定值,而是使用f(时间、计数)的新值不断地递增。

代码语言:javascript
运行
复制
def find_limit():
    list_1 = [(1, 50000), (2, 40000), (3, 20000), (4, 10000), (5, 5000), (6, 3000), (7, 500), (8, 10), (9, 100),
              (10, 2000), (11, 5000), (11, 8000), (12, 10000), (13, 20000)]
    found = False
    limit = 20000
    for time, count in list_1:
        if count < limit:
            found = True
        if found:
            if count >= limit:
                return time

print(find_limit())

还有什么其他方法可以让我在列表不断更新时,计数超过阈值的时间增加吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-14 19:21:16

使用numpy

代码语言:javascript
运行
复制
import numpy as np

limit = 20000
list_1 = np.array([(1, 50000), (2, 40000), (3, 20000), (4, 10000), (5, 5000), (6, 3000), (7, 500), (8, 10), (9, 100),
              (10, 2000), (11, 5000), (11, 8000), (12, 10000), (13, 20000)])

res=list_1[((list_1[:-1,1]<limit)&(list_1[1:,1]>=limit)).argmax()+1,:]
#list_1[((list_1[:-1,1]<limit)&(list_1[1:,1]>=limit)).argmax()+1,0] in order to get just 13

简言之:

代码语言:javascript
运行
复制
((list_1[:-1,1]<limit)&(list_1[1:,1]>=limit))

将返回布尔向量,并对两个连续的数字进行比较,以确定它们之间是否交叉了limit。左边部分从索引0到最后一个元素,而右边部分从索引1到最后一个元素,有各自的条件。

接下来- argmax()将返回满足这两种条件的第一个索引,并且我们需要添加1,因为我们想要得到已经越过线的索引,而不是以前的索引。

输出:

代码语言:javascript
运行
复制
[   13 20000]
票数 0
EN

Stack Overflow用户

发布于 2020-01-14 19:12:22

IIUC

代码语言:javascript
运行
复制
list_1 = [(1, 50000), (2,40000), (3,20000), (4,10000), (5, 5000), (6, 3000), (7,500), 
          (8, 10), (9,100), (10,2000), (11,5000),(11,8000),(12,10000), (13,20000)]

df = pd.DataFrame(list_1, columns=['time', 'count'])

# Set the limit
limit = 20_000
times_over_limit = df[df['count'] < limit]['time'].tolist()

# List of times for which count is less than limit value
times_over_limit
[4, 5, 6, 7, 8, 9, 10, 11, 11, 12]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59740039

复制
相关文章

相似问题

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