【问题标题】:Finding peaks and troughs in time series data in a 1D array - Javascript在一维数组中查找时间序列数据中的峰值和谷值 - Javascript
【发布时间】:2017-04-23 13:11:43
【问题描述】:

所以基本上我有一个 1d 数组,其中有超过 500 个值在 100-130 之间浮动,或者大约没有按特定顺序排列(随机);我想知道如何找到这些数据的高峰和低谷。有没有办法改变峰值检测的灵敏度?什么是综合算法?如果有它的 JS 库,那就太棒了。

【问题讨论】:

  • 如果我们能够 a) 查看您的数据并 b) 查看您迄今为止的尝试,将会有所帮助。
  • 所以它实际上是一个数组,如 var thisthing = [102.54,112.23, etc... 用于 500 个值。我没有尝试任何事情,因为我不知道如何进行。

标签: javascript algorithm


【解决方案1】:

查找波峰和波谷的算法本质上与您在查看图表时用手指执行的操作相同。你从一开始就沿着这条线走,当你看到一个高峰和一个低谷时要注意。

在编程上我们可以这样定义:

对于一些长度为 n 的数组(n-1 是最后一个元素的索引,0 是第一个元素的索引),从 1 迭代到 @987654325 @。那么波峰和波谷将被定义为:

  • 对于元素i,如果i-1 > ii+1 > i。那么i 就是一个低谷。
  • 对于元素i,如果i-1 < ii+1 < i。那么i就是一个高峰。

这将是一个O(n) 算法,并且有足够的信息可以对其进行编程。


以下是实现上述算法的示例程序:

var array = [102,112,115,120,119,102,101,100,103,105,110,109,105,100];

function findPeaksAndTroughs(array) {
  var start = 1;                        // Starting index to search
  var end = array.length - 2;           // Last index to search
  var obj = { peaks: [], troughs: []  };// Object to store the indexs of peaks/thoughs
  
  for(var i = start; i<=end; i++)
  {
    var current = array[i];
    var last = array[i-1];
    var next = array[i+1];
    
    if(current > next && current > last) 
    	obj.peaks.push(i);
    else if(current < next && current < last) 
    	obj.troughs.push(i);
  }
  return obj;
}

console.log(findPeaksAndTroughs(array));

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 2021-08-29
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2021-06-30
    • 2021-12-24
    相关资源
    最近更新 更多