2017-12-20 20 views
0

私は、テキストファイルのスペクトルデータとして2倍の型の2次元配列を持っています。私はスペクトル内でピークを見つけなければならない。私はバイナリサーチを使って配列内のピークを見つけていますが、誤ったピークも出ています。取得した結果をどのようにフィルタリングできますか。誰もがこのことを知っている場合、私Javaのラマンスペクトル処理

を助けてくださいここで私は

static ArrayList <Double> nPeaks(double[] array, int range) { 

    if (array == null) { 
    System.out.println("Error"); 
    } 

    double result = 0, l, r; 
    double[] peaks = null; 

    // Check main body 
    for (int i = 0; i < array.length; i++) { 
    boolean isPeak = true; 
    // Check from left to right 
    l = Math.max(0, i - range); 
    r = Math.min(array.length - 1, i + range); 
    for (int j = (int) l; j <= r; j++) { 
     // Skip if we are on current 
     if (i == j) { 
     continue; 
     } 
     if (array[i] < array[j]) { 
     isPeak = false; 
     break; 
     } 
    } 

    if (isPeak) { 

     //System.out.println("Peak at " + i + " = " + array[i]); 
     peaklist.add(array[i]); 
     result++; 
     i += range; 
    } 
    } 

    return peaklist; 
} 
+0

書いているされて -

PEAKN最大値であり、 Arrays.binarySearchを使用していますか?どのような場合でも、バイナリ検索にはソートされたデータが必要です。ソートされたデータでは、「ピークを見つける」ことは確かではありません。 aproach全体を再考する必要があります。 –

答えて

0

を使用していますあなたの質問は、私には明確でないコードがあります。私は入力配列の最小から最小の順序を生成していると仮定します。はいの場合は、ソートされた配列を作成しようとしています(降順)。

配列を降順で並べ替えるだけです。それは

ピーク1、ピーク2、peak3 ... PEAKN

、 ピーク1のような結果になります - の代わりに、なぜあなたはそれを自分で最小値

+0

いいえ私はそれを並べ替えていないと私は最小の値をしたくない私は、より偏差のある領域だけをしたい。 – user6308908

+0

サンプル入力とサンプル出力を共有できますか? – Ganeshkumar

+0

入力配列= {1099.5054,1075.5621,1097.5502,1079.3259,1080.0361,1080.5549,1079.4446,1080.8217,1080.9097,1081.39,1081.0564,1079.259,1080.9725,1081.027,1080.5486,1081.2754,1079.1895,1079.5299,1079.1648,1078.1195,1077.5784,1075.3386,1075.3075 、1074.4132,1075.8834} 出力:31 = 1078.5387で24 = 1075.8834 ピーク15 = 1081.2754 ピーク9 = 1081.39 ピーク時0 = 1099.5054 ピークピーク – user6308908