[英]Calculate average slope over a period of time with python
我想计算多个数字的平均斜率。 例如:我得到了 5 个数字(例如 1.1523、1.4626、1.5734、1.8583、1.6899)。 我每 15 分钟得到一个新数字并删除最旧的数字并想再次计算平均斜率。
我已经看过公式,但我真的不知道如何计算它,就像假想的 x 轴是时间一样。 就像我有: X:14:00、14:15、14:30、14:45、15:00 Y:1.1523、1.4626、1.5734、1.8583、1.6899
假设所有时间都采用 HH:MM 格式并且我们不需要担心午夜过后,这应该可行:
X = ['14:00', '14:15', '14:30', '14:45', '15:00']
Y = [1.1523, 1.4626, 1.5734, 1.8583, 1.6899]
minutes = [int(s[:2]) * 60 + int(s[3:]) for s in X]
slope = (Y[-1] - Y[0]) / ((minutes[-1] - minutes[0]) / 60)
print(slope)
slopes = [(Y[i] - Y[i - 1]) / ((minutes[i] - minutes[i - 1]) / 60) for i in range(1, len(X))]
print(slopes)
averageSlope = sum(slopes) / (len(X) - 1)
print(averageSlope)
结果:
0.5375999999999999
[1.2411999999999992, 0.44320000000000004, 1.1396000000000006, -0.6736000000000004]
0.5375999999999999
我可能是错的,但平均斜率不是以与平均速度相同的方式确定的——即 Delta d / Delta t? 如果是这样,不应该是 Delta Y / Delta X 吗?
from datetime import datetime
X = ['14:00', '14:15', '14:30', '14:45', '15:00']
Y = [1.1523, 1.4626, 1.5734, 1.8583, 1.6899]
today = datetime.now()
avg = []
for i in range(len(X) - 1):
e = X[i + 1].split(":")
e = datetime(today.year, today.month, today.day, int(e[0]), int(e[1]))
s = X[i].split(":")
s = datetime(today.year, today.month, today.day, int(s[0]), int(s[1]))
deltaX = e - s
deltaY = Y[i + 1] - Y[i]
ans = (deltaY / deltaX.seconds) / 60
avg.append(f'{ans:.9f}')
print(avg)
['0.000005746', '0.000002052', '0.000005276', '-0.000003119']
考虑以下数据:
1 minute(s) 1 meter(s)
2 minute(s) 2 meter(s)
3 minute(s) 3 meter(s)
无论你如何切蛋糕,你都应该有 1 米/分钟的坡度。
同样的:
1 minute(s) 2 meter(s)
2 minute(s) 3 meter(s)
3 minute(s) 5 meter(s)
2 到 1 分钟平均为 1 米/分钟,3 到 2 分钟为 2 米/分钟,3 到 1 分钟为 1.5 米/分钟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.