繁体   English   中英

使用 python 计算一段时间内的平均斜率

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM