C#实现局部峰值查找,功能对应Matlab中的findpeaks.m
相关算法的原理参考Ronny,地址:图像分析:投影曲线的波峰查找,这里感谢下原作者。
参照C++的代码实现,我用C#翻译了下,其实原理也很简单的,下面放相关实现代码:
private double[] oneDiff(double[] data) { double[] result = new double[data.Length - 1]; for (int i = 0; i < result.Length; i++) { result[i] = data[i + 1] - data[i]; } return result; } private int[] trendSign(double[] data) { int[] sign = new int[data.Length]; for (int i = 0; i < sign.Length; i++) { if (data[i] > 0) sign[i] =1; else if (data[i] == 0) sign[i] = 0; else sign[i] = -1; } for (int i = sign.Length - 1; i >=0 ; i--) { if (sign[i] == 0 && i ==sign.Length - 1) { sign[i] = 1; } else if (sign[i] == 0) { if (sign[i+1] >= 0) { sign[i] = 1; } else { sign[i] = -1; } } } return sign; } private int[] getPeaksIndex(int[] diff) { List<int> data = new List<int>(); for (int i = 0; i != diff.Length - 1; i++) { if (diff[i+1] - diff[i] == -2) { data.Add(i + 1); } } int[] result = new int[data.Count]; for (int i = 0; i < result.Length; i++) { result[i] = data[i]; } return result;//相当于原数组的下标 }
调用方法:
double[] data = {25, 8, 15, 5, 6, 10, 10, 3, 1, 20, 7}; int[] index = getPeaksIndex(trendSign(oneDiff(Constant.data)));
返回的int[]数组内容是对应原数组中峰值对应的索引(从0开始)
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
java源码-HashSet
开篇 当抛弃所有虚的东西之外,我决定好好的把java的基础再过一遍,包括java源码、effective java、阿里的java代码编程规范。希望能够进一步夯实自己的基础,增加自己的底气。 java部分的内容我会着重看看java的集合类和java的concurrent包下的多线程部分,有兴趣的同学可以撸下这部分代码,另外jdk8的源码部分可以去github上面找,已经有人在上面贡献了。 就让我以HashSet做一个开局吧。 HashSet类图 HashSet类图.png 构造函数 在HashSet内部我们使用HashMap<E,Object> map对象来实际存储HashSet的集合对象,由于HashSet当中保存的只是key而没有value,所以在实际的HashMap当中map的key保存的是HashSet集合当中的值,map的value是固定的一个Object对象,也就是当前的PRESENT对象。 知道了HashSet内部的存储方式是采用HashMap的,那么其实我们后面的增删改查其实操作的就是HashMap对象,所以后面的分析其实就是在分析HashMap的...
- 下一篇
[python skill]基于python的bootstrap analysis方法
上回书说到(惊堂木!)Dr. Semmelweis and the discovery of handwashing案例中的第8步中使用了bootstrap分析方法(Bootstrap analysis of Semmelweis handwashing data),其实小弟内心写起来是有一丢丢心虚的,因为本身不是相关专业出身没有系统学习过概率学的方法,加之互联网时代大家皮糙肉厚,其实没太多时间仔细研究某一种具体的方式方法(可能只有我一个人这样)。碰巧,今天datacamp里面学习的一章节内容就是根据bootstrap analysis方法展开的。所以趁着工作室打烊前的小空隙,总结一下今天下午的学习成果。 所谓bootstrap analysis: 在统计学中,自助法(Bootstrap Method,Bootstrapping或自助抽样法)是一种从给定训练集中有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。自助法由Bradley Efron于1979年在《Annals of Statistics》上发表。当样本来自总体,能以正态分布来描述,其...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,CentOS7官方镜像安装Oracle11G
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池