Fra*_*ang 2 python algorithm list moving-average
有什么简单的方法可以找出列表的趋势吗?
例如:
[5.0, 6.0, 9.0, 4.0, 10.0]。总体而言,其元素随时间而增加。[6.0, 4.0, 5.0, 4.0, 3.0]。随着时间的流逝,它的元素正在减少。理想情况下,我希望从此类列表中获得布尔值结果。
实际上,我想知道数据收集的趋势。不是线性增加或正好一一增加。在现实世界中,某些数据并不总是那么好,也许有四分之一的数据不如以前那么好(但不是太差,也就不是太多),但是只要其趋势良好,就可以很好。
总体而言,其要素正在增加。
我认为这意味着您要考虑移动平均线的变化。一半的工作就是定义您真正想要的东西,因此我建议您在开始编写逻辑之前仔细考虑一下。
我将@Jaime的移动平均值解决方案与结合起来np.diff,提出了一种推断您想要的可能方法。
import numpy as np
def moving_average(a, n=3) :
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:] / n
lst1 = [5.0, 6.0, 9.0, 4.0, 10.0]
lst2 = [6.0, 4.0, 5.0, 4.0, 3.0]
res1 = np.all(np.diff(moving_average(np.array(lst1), n=4))>0)
# True; i.e. "generally increasing"
res2 = np.all(np.diff(moving_average(np.array(lst2), n=4))>0)
# False, i.e. "generally not increasing"
Run Code Online (Sandbox Code Playgroud)
说明
moving_average 在4个条目的窗口中计算移动平均值。np.diff 然后计算这些数字之间的成对变化。np.all通过测试>0确定变化是全部为正还是不是全部为正。没有明确要求导致的过分简化。