有什么简单的方法可以查出榜单的走势吗?
例如:
[5.0, 6.0, 9.0, 4.0, 10.0]
。总的来说,它的元素随着时间的推移而增加。[6.0, 4.0, 5.0, 4.0, 3.0]
。它的元素随着时间的推移而减少。
理想情况下,我希望从这些类型的列表中得到 bool 结果。
其实我想知道一组数据的趋势。不是线性增加或精确地逐一增加。在现实世界中,有些数据并不总是好的,可能有一两个季度的数据不如以前(但不会太差,也不会太多),但只要它的趋势是好的,它很好。
最佳答案
On the whole, Its elements are increasing.
我认为这意味着您想考虑移动平均线的变化。一半的工作是定义您真正想要的,因此我建议您在开始编写逻辑之前仔细考虑这一点。
我合并了一个移动平均线 solution by @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"
解释
moving_average
计算 4 个条目的窗口的移动平均值。- 在每种情况下,您都会得到一个包含 2 个数字的数组(对于长度为 5 的列表)。
np.diff
然后计算这些数字之间的成对变化。np.all
和 test>0
确定更改是否全部为正或不全部为正。没有明确要求导致的过度简化。
关于python - 如何确定 Python 中数字列表的趋势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49359474/