热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

获得一维数据的峰值(C++/Matlab)

本方法源自于求解图像功率谱中某列(一维离散数据)的峰值之间的距离问题。比如输入的一维离散数据的分布如下:即从左到右,分别代表下标从1到n(cpython中为0到n-1)的数值大小,

本方法源自于求解图像功率谱中某列(一维离散数据)的峰值之间的距离问题。比如输入的一维离散数据的分布如下:


即从左到右,分别代表下标从1到n(c/python中为0到n-1)的数值大小,间隔为1,n表示输入一位数据的长度。在此对数据的峰重新定义:满足左右值都比它小的等值区间,比如[1,2,2,1]的[2,2]、[1,2,0]的[2]都是数据的“峰”,但[1,2,2,4]、[1,2,2,2]不存在峰。所有峰中最高的峰称作“主峰”,其他为“次峰”。对于以上的例子,所有峰已手动圈出。

如图所示,共18个峰。现在问题是,输入一组数据,怎么求得所有的峰的值(或者坐标)呢?(坐标用中点表示区间)

在这以坐标为例,每个峰的坐标由它所在区间的中点表示。

首先在这里定义两个变量:start_peak和end_peak。分别动态表示每个峰的区间开始和结束的坐标。

遍历一维数据,如果当前数据的值大于上一个(左侧)数据的值,说明位于上升过程,更新start_peak为当前值的下标;如果小于,(并且start_peak的值不是初始化值),说明上一个数据的下标已经是该峰的区间结束坐标,更新end_peak为上一个值的下标,这样就得到了这个峰的开始和结束两个坐标,所以在更新之后紧接着将start_peak和end_peak的平均值保存在结果中,同时start_peak归为初始化值(防止下降过程中每次都会保存一个峰,和上一段粗体呼应)。最后遍历结束返回即可。其他峰值或区间等同理稍微修改就能够获得。

matlab版代码:

function peak_index=find_peak(data)
n=length(data);%数据长度
start_peak=0;%初始化
end_peak=0;
t=0;
for i=1:n
if (i>=2 && data(i)>data(i-1))
start_peak=i;
end
if (i>=2 && data(i) end_peak=i-1;
t=t+1;
peak_index(t)=(start_peak+end_peak)/2;
start_peak=0; %初始化
end
end
end

c++版:(没有跑过,纯直接翻译)

vector find_peak(vector& data) {
vector ans;
int n=data.size();
int start_peak=-1;
int end_peak=-1;
for(int i=0;i if(i>=1 && data[i]>data[i-1])
start_peak=i;
if(i>=1 && data[i]=0){
end_peak=i-1;
ans.push_back(ceil((end_peak+start_peak)/2));
start_peak=-1;
}
}
return ans;
}

最后的返回的结果:

经过对比后,和图片一致。


推荐阅读
  • 项目背景:在玩游戏《坎巴拉太空计划》过程中发现火箭升空的过程比较有意思,想通过程序实现表述其具体升空的过程功能:1.输入变量, ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了[从头学数学]中第101节关于比例的相关问题的研究和修炼过程。主要内容包括[机器小伟]和[工程师阿伟]一起研究比例的相关问题,并给出了一个求比例的函数scale的实现。 ... [详细]
  • 本文介绍了使用Python根据字典中的值进行排序的方法,并给出了实验结果。通过将字典转化为记录项,可以按照字典中的值进行排序操作。实验结果显示,按照值进行排序后的记录项为[('b', 2), ('a', 3)]。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • angular.element使用方法及总结
    2019独角兽企业重金招聘Python工程师标准在线查询:http:each.sinaapp.comangularapielement.html使用方法 ... [详细]
  • 开发笔记:python协程的理解
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了python协程的理解相关的知识,希望对你有一定的参考价值。一、介绍什么是并发?并发的本质就是 ... [详细]
author-avatar
最棒的寒冬腊月_531
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有