首页 > 解决方案 > 如何在不平滑的情况下确定双峰直方图中的较低峰值?

问题描述

它很容易识别双峰分布右侧的最高峰。我需要确定以下双峰分布中的左侧(在我的数据中也总是较低)峰值:https ://drive.google.com/open?id=1n-Kp5loJze-L3vNgq7_3qFrmI-JiE20K

这里,1 是左峰,2 是右峰。1 总是小于 2。

使用scipy.signal.argrelmax,我已经能够找到所有相对峰值,但我需要在我的数据中特别提取左峰值(标记为 1)。

附图中仅用 1 和 2 标记的两个峰的值,忽略所有其他已确定的峰。右边的峰 2 很容易提取,但我也想提取峰 1。

标签: pythonhistogram

解决方案


假设 x-bins 和 y-counts 是 np.arrays,沿着这些思路可能会起作用:

从 scipy.signal 导入 numpy.polynomial.polynomial 作为 poly 导入 argrelextrema

c = poly.polyfit(x,y,4)
fit = poly.polyval(x,c)
i = argrelextrema(fit, np.less)

这将为您提供双峰分布之间的分界点(大约)

那么您可以执行以下操作:

p1 = np.max(y[:i])
p2 = np.max(y[i:])

有时四次不适合您想要的方式,所以我很欣赏这可能难以实施,但可能会沿着这些路线,甚至是三角拟合?

希望能帮助到你


推荐阅读