在一维数组中查找时间序列数据中的峰值和低谷 - Javascript

时间:2017-04-23 04:20:45

标签: javascript algorithm

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

1 个答案:

答案 0 :(得分:0)

查找峰值和谷值的算法与查看图表时手指的算法基本相同。你从一开始就跟着这条线,当你看到一个高峰和一个低谷时注意。

在程序上我们可以将其定义为:

对于某些长度为n的数组(,其中n-1是最后一个元素的索引,而0是第一个的索引),请从1n-2。然后将峰和谷定义为:

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

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

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

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));