【发布时间】:2018-11-24 20:35:18
【问题描述】:
每次我骑自行车时,都会逐秒收集多项指标的数据。为简单起见,假设我有一个 csv 文件,如下所示:
secs, watts,
1,150
2,151
3,149
4,135
.
.
.
7000,160
因此,我骑行的每一秒都有一个相关的功率值,以瓦特为单位。
我想知道“如果我将骑行分成 N 秒块,哪些块的平均功率最高?”
我正在使用 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 的任何值,则此计算需要永远进行(阅读:在一台像样的机器上超过两分钟)。请帮我找出我的代码遇到瓶颈的地方,这似乎应该更快。
【问题讨论】:
标签: python performance pandas numpy