6个版本
0.1.5 | 2022年5月18日 |
---|---|
0.1.4 | 2022年5月2日 |
0.1.3 | 2022年3月6日 |
0.1.2 | 2020年10月8日 |
0.1.1 | 2020年9月24日 |
#510 in 数学
每月下载量 495
用于 mathbox
53KB
547 行
描述
在数据的1D切片中查找局部最大值的筛选子集。
这里实现的功能可能与使用MATLAB的findpeaks
或Python的scipy.signal.find_peaks
的任何人熟悉。
该软件包中最有用的一项功能可能是通过突出度过滤峰值。此参数允许您获取在噪声数据中看起来像峰值的局部最大值子集。
可以设置的筛选条件包括
- 突出度
- 高度
- 相邻数据点之间差异的绝对值
- 峰值可能拥有的平台点数
- 峰值之间的距离
所有参数都可以通过最小和最大界限指定。
数据切片的元素不需要是特定类型,只要它们实现了几个特性(用于克隆、减法和比较)。
示例
use find_peaks::PeakFinder;
use std::fs::File;
use std::io::prelude::*;
fn read_file(path: &str) -> std::io::Result<String> {
let mut file = File::open(path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
Ok(contents)
}
fn main() -> () {
let data: Vec<f64> = read_file("data/spectrum.dat").expect("File not read!").as_str()
.split_whitespace()
.map(|x| x.parse::<f64>().unwrap())
.collect();
let mut fp = PeakFinder::new(&data);
fp.with_min_prominence(200.);
fp.with_min_height(0.);
let peaks = fp.find_peaks();
for p in peaks {
println!("{} {}", p.middle_position(), p.height.unwrap());
}
}
可视化结果