编辑:我把问题转到codereview.stackexchange
我正在尝试分析我的运行数据,它以gpx的形式出现,数据的导入和写入工作非常出色。你知道吗
现在,我要平均计算超过一定距离(例如1000米)的两点之间的速度,并将结果视为每公里的列表。如果最后一公里没有跑完,我想计算最后一段的速度。你知道吗
该函数具有以下输入:
average_over_distance(input_datalist, input_distancelist, average_distance)
input_datalist = [0, 5.3, 4.3, 4.6 ... ]
input_distancelist = [0, 4.5, 7.8, 12.3 ... ]
average_distance = 1000
式中,input_datalist
是每个数据点的速度,input_distancelist
是从开始到这个数据点覆盖的米数。我已经写了一些代码,这是工作,但出人意料的慢,有一个小错误,其中最后一项需要删除,因为它将永远是一个零。你知道吗
如果有人能看一下并提出一些改进建议(特别是在性能方面),那将非常有帮助。你知道吗
# import numpy
import numpy as np
# defined a function to find the nearest value to a given one
def find_nearest(array,value):
idx = np.searchsorted(array, value, side="left")
if idx > 0 and (idx == len(array) or math.fabs(value - array[idx-1]) < math.fabs(value - array[idx])):
return array[idx-1]
else:
return array[idx]
# defined a function to calculate the average between two points of a list
def mean(numbers):
return float(sum(numbers)) / max(len(numbers), 1)
# defined main function
def average_over_distance(input_datalist, input_distancelist, average_distance):
output_average_list = []
ratio_steps = int(input_distancelist[-1]/average_distance)
distance_steps = range(average_distance,(ratio_steps+2)*average_distance,average_distance)
for index1, elements1 in enumerate(input_distancelist):
for index2, elements2 in enumerate(distance_steps):
if elements1 == find_nearest(input_distancelist,elements2):
if index2 == 0:
cutoff_index_start = 0
cutoff_index_end = index1
else:
cutoff_index_start = cutoff_index_end+1
cutoff_index_end = index1
output_average_list.append(mean(input_datalist[cutoff_index_start:cutoff_index_end]))
# TODO: The last file will always be zero... Reason unclear... going from "distance_steps = range(average_distance,(ratio_steps+1)*average_distance,average_distance)" to "distance_steps = range(average_distance,(ratio_steps+2)*average_distance,average_distance) does not help
del output_average_list[-1]
return output_average_list
目前没有回答
相关问题 更多 >
编程相关推荐