gpt4 book ai didi

python - 查找数据区间并对其进行排序

转载 作者:行者123 更新时间:2023-12-01 09:20:02 31 4
gpt4 key购买 nike

每次我骑自行车时,都会逐秒收集许多指标的数据。为简单起见,假设我有一个类似于以下内容的 csv 文件:

secs, watts,
1,150
2,151
3,149
4,135
.
.
.
7000,160

因此,我骑行的每一秒都有一个相关的功率值(以瓦为单位)。

我想知道“如果我将骑行分成 N 个第二 block ,哪些 block 的平均功率最高?”

我正在使用 pandas 数据框来管理我的数据,这是我用来回答我的问题的代码:

def bestEffort(ride_data,
metric='watts',
interval_length=5,
sort_descending=True):

seconds_in_ride = len(ride_data[metric])

average_interval_list = [[i+1,
np.average(
[ride_data[metric][i+j]
for j in range(interval_length)])
]
for i in range(0,
seconds_in_ride -
interval_length)]

average_interval_list.sort(key=lambda x: x[1], reverse=sort_descending)

return average_interval_list

看起来很简单?正确的?给定一个索引,计算interval_length后续条目的平均值。在表单列表中跟踪此内容

[[second 1, avg val of metric over the interval starting that second],
[second 2, avg val of metric over the interval starting that second],
[second 3, avg val of metric over the interval starting that second],
.
.
.
[second 7000-interval_length, avg val of metric over the interval starting that second]]

然后,我按平均值对结果列表进行排序。所以第一个条目的形式为

[second_n, avg val of metric over the interval starting in second n]

告诉我,在给定的时间间隔长度内,我的最强努力是从训练中的 Second_n 开始的。

问题是,如果我将“interval_length”设置为高于 30 的值,则此计算将永远持续(阅读:在一台像样的机器上超过两分钟)。请帮助我找到我的代码遇到瓶颈的地方,这看起来应该更快。

最佳答案

如果将数据放入 numpy 数组中,例如瓦特,则可以使用卷积计算平均功率:

mean_power = np.convolve(watts, np.ones(interval_length)/interval_length, mode='valid')

正如您在 the reference of np.convolve 中看到的那样,此函数计算第一个参数的局部平均值,并使用第二个参数定义的窗口进行平滑。在这里,我们使用“顶帽”函数进行平滑——即一个“开/关”函数,在长度间隔 interval_length 内保持恒定,否则为零。这是初步的,但给出了初步估计。

那么你最努力的时间是:

time_strongest_effort = np.argmax(mean_power)

关于python - 查找数据区间并对其进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50868100/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com