python - 如何在不平滑的情况下确定双峰直方图中的较低峰值?
问题描述
它很容易识别双峰分布右侧的最高峰。我需要确定以下双峰分布中的左侧(在我的数据中也总是较低)峰值:https ://drive.google.com/open?id=1n-Kp5loJze-L3vNgq7_3qFrmI-JiE20K
这里,1 是左峰,2 是右峰。1 总是小于 2。
使用scipy.signal.argrelmax
,我已经能够找到所有相对峰值,但我需要在我的数据中特别提取左峰值(标记为 1)。
附图中仅用 1 和 2 标记的两个峰的值,忽略所有其他已确定的峰。右边的峰 2 很容易提取,但我也想提取峰 1。
解决方案
假设 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:])
有时四次不适合您想要的方式,所以我很欣赏这可能难以实施,但可能会沿着这些路线,甚至是三角拟合?
希望能帮助到你
推荐阅读
- google-visualization - 无法读取未定义谷歌图表的属性“0”
- wordpress - 如何从 WordPress URL 中删除“/?COLLCC=”
- css - 无法在 css 中更改框的宽度 - 使用 extjs 框架
- java - Java11 中找不到 jdk.incubator.httpclient 模块
- spring - Spring 4 - Spring 重试 1.2.1.RELEASE @Recover 不起作用
- r - 在 R 中验证负二项式 glmm(使用 glmmadmb)
- javascript - 使用 PHP 或 JS 将 div 插入另一个
- iot - Wink API 订阅一夜之间停止发送
- postgresql - 使用 Hibernate/Spring 数据将枚举列表映射到 PostgreSQL 中的字段
- c++ - C++,指针的容器向量,重载运算符<<