首页 > 解决方案 > 如何计算python中列表的“峰值”?

问题描述

我有一个列表,其中元素加起来为 1。如何测量列表的密集度(或峰值)?

[1,0,0,0,0] 这应该具有比 [0.2, 0.3, 0 , 0.4, 0.1] 更高的密度。这是因为第一个列表在直方图中看起来更尖。第二个列表会变化更多,没有一个元素明显优于其他元素。

标签: pythonlist

解决方案


您可以使用类似以下的函数:

def peakyness(my_list):
    deviation = []
    for x in range(0, len(my_list)-1):
        deviation.append(abs(my_list[x]-my_list[x+1]))
    return (max(deviation))

>>> peakyness([1,0,0,0,0]) = 1
>>> peakyness([0.2,0.3,0,0.4 0.1]) = 0.4

这实际上将返回给定列表的 2 个元素之间的最大差异,因为 peakyness 需要一个与相邻元素差异最大的元素,如您所说:

没有一个元素明显优于其他元素

1但是,当我们输入一个类似的列表时,这将返回一个值[1, 0, 1, 0, 1]
这个列表将有 3 个 1 的“峰”和 2 个 0 的“谷”。
如果这个列表不是“尖”的(你对尖的定义有点不清楚),那么最好的选择之一是使用标准使用统计模块的偏差

import statistics
statistics.stdev(my_list)

对于 list [1,0,1,0,1],这将返回一个值0.5477225575051661


推荐阅读