私は、テキストファイルのスペクトルデータとして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;
}
書いているされて -
PEAKN最大値であり、 Arrays.binarySearchを使用していますか?どのような場合でも、バイナリ検索にはソートされたデータが必要です。ソートされたデータでは、「ピークを見つける」ことは確かではありません。 aproach全体を再考する必要があります。 –