当前位置: 首页 > 知识库问答 >
问题:

用python计算直方图峰值

华良平
2023-03-14

在Python中,如何计算直方图的峰值?

我试过这个:

import numpy as np
from scipy.signal import argrelextrema

data = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 1, 2, 3, 4,

        5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9,

        12,

        15, 16, 17, 18, 19, 15, 16, 17, 18, 

        19, 20, 21, 22, 23, 24,]

h = np.histogram(data, bins=[0, 5, 10, 15, 20, 25])
hData = h[0]
peaks = argrelextrema(hData, np.greater)

但结果是:

(array([3]),)

我希望它能找到0号和3号垃圾桶的峰值。

请注意,峰值跨越超过1个斌。我不希望它将跨度超过1列的峰视为额外的峰。

我对另一种获得高峰的方法持开放态度。

注:

>>> h[0]
array([19, 15,  1, 10,  5])
>>> 

共有3个答案

钱飞翼
2023-03-14

尝试find峰值库。

pip install findpeaks

# Your input data:
data = [0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 12, 15, 16, 17, 18, 19, 15, 16, 17, 18,  19, 20, 21, 22, 23, 24,]

# import library
from findpeaks import findpeaks

# Find some peaks using the smoothing parameter.
fp = findpeaks(lookahead=1, interpolate=10)
# fit
results = fp.fit(data)
# Make plot
fp.plot()
# Results with respect to original input data.
results['df']

# Results based on interpolated smoothed data.
results['df_interp']
罗梓
2023-03-14

我写了一个简单的函数

def find_peaks(a):
  x = np.array(a)
  max = np.max(x)
  lenght = len(a)
  ret = []
  for i in range(lenght):
      ispeak = True
      if i-1 > 0:
          ispeak &= (x[i] > 1.8 * x[i-1])
      if i+1 < lenght:
          ispeak &= (x[i] > 1.8 * x[i+1])

      ispeak &= (x[i] > 0.05 * max)
      if ispeak:
          ret.append(i)
  return ret

我将峰值定义为大于相邻值180%和大于最大值5%的值。当然,您可以根据自己的喜好调整这些值,以便为您的问题找到最佳设置。

关玄裳
2023-03-14

在计算拓扑中,持久同调的形式主义提供了一个“峰值”的定义,似乎可以满足你的需求。在一维情况下,峰值由下图中的蓝色条表示:

在一个峰值检测问题的堆栈溢出答案中给出了算法的描述。

好的一面是,这种方法不仅识别了峰值,而且以自然的方式量化了“意义”。

一个简单而高效的实现(与数字排序一样快)以及本博客文章中给出的上述答案的源材料:https://www.sthu.org/blog/13-perstopology-peakdetection/index.html

 类似资料:
  • 问题内容: 有许多方法可以编写可计算直方图的Python程序。 所谓直方图,是指一个函数,该函数计算an中对象的出现并在字典中输出计数。例如: 编写此函数的一种方法是: 有没有更简洁的编写此功能的方法? 如果我们在Python中具有字典理解功能,则可以编写: 但是由于Python 2.6没有它们,我们必须编写: 尽管此方法可能可读,但效率不高:L多次遍历。此外,这不适用于单寿命发电机。该功能对于迭

  • 本文向大家介绍Python实现计算图像RGB均值方式,包括了Python实现计算图像RGB均值方式的使用技巧和注意事项,需要的朋友参考一下 要求 存在一个文件夹内有若干张图像,需要计算每张图片的RGB均值,并计算全部图像的RGB均值。 代码 这里需要注意cv2.imread()读取顺序为BGR问题。 注意 路径不能出现中文,不然容易出错。 错误如下: TypeError: 'NoneType' o

  • null 我相信这个答案是正确的,但我无法证明。有人能证明它为什么起作用或提供一个反例吗?

  • 我使用matplotlib创建直方图。仍然有一些问题我自己或借助互联网无法解决。 > 如何更改某些垃圾箱的颜色?详细地说,我想用:a.)value bin更改箱子的颜色 如何不仅用1个小数点的数字标记X轴,而且用2个小数点标记X轴(现在只是不打印)? 请参见下面绘制的柱状图: plt。迄今为止的直方图

  • 问题内容: 我试图弄清楚如何使用PythonNumpy函数cov计算协方差。当我将其传递给两个一维数组时,我得到了一个2x2的结果矩阵。我不知道该怎么办。我不太擅长统计,但我相信在这种情况下的协方差应该是一个整数。 这就是我想要的。我写了我自己的: 可以,但是我认为Numpy版本要有效得多,如果我能弄清楚如何使用它的话。 有人知道如何使Numpy cov函数像我写的那样执行吗? 谢谢, 问题答案:

  • 给定一个数组[a,b,c,d,e,f,G],其中a-g是数,b是峰当且仅当a<=b且b>=c。 他给出了一个递归的方法: 他说算法是T(n)=T(n/2)+o(1)=o(lgn) 在他的pdf中,他还给出了一个完整的例子: 他的定义是否意味着我们只需要找到一个峰? 我相信这个问题可以看作是在Riverst算法入门书中寻找最大和最小元素。