短い回答:おそらくargrelextrema
はあなたの仕事に十分な柔軟性を持たないでしょう。あなたのニーズに合った独自の関数を書くことを検討してください。
長い答え:あなたはargrelextrema
を使用するためにバインドされていますか?はいの場合、comparator
とorder
の引数がargrelextrema
(referenceを参照)で遊ぶことができます。
np.greater_equal
をcomparator
と選択すれば十分でしょう。
>>> data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 1, 0 ])
>>> print(argrelextrema(data, np.greater_equal,order=1))
(array([2, 6, 7]),)
注しかし、この方法で
>>> data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 4, 1, 0 ])
>>> print(argrelextrema(data, np.greater_equal,order=1))
(array([2, 6, 8]),)
はargrelextrema
が今大きいかである最大値として、すべてを見ているので、あなたはおそらく、最初3
値と最大値として4
を見つけ、たいと異なった動作をすることをその2つの最も近い近隣に等しい。 order
引数を使用して、この比較が保持する必要があるネイバー数を決定することができます。order=2
を選択すると、上限が4
になるように上の例が変更されます。
>>> print(argrelextrema(data, np.greater_equal,order=2))
(array([2, 8]),)
この方法の欠点は、しかし、があります - さんは、一度に多くのデータを変更してみましょう:argrelextrema
があるとして最後の値は、4
であなたのピークを見つけることからあなたを保つよう
>>> data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 4, 1, 5 ])
>>> print(argrelextrema(data, np.greater_equal,order=2))
(array([ 2, 10]),)
は別のピークを追加するには4
より大きい2番目のネイバーが表示されます(ノイズの多いデータには有効ですが、必ずしもすべてのケースで期待される動作である必要はありません)。
argrelextrema
を使用すると、固定数のネイバー間で常にバイナリ操作に制限されます。ただし、上記の例でargrelextrema
はすべてn
(data[n] > data[n-1] and data[n] > data[n+1]
)を返すようにしています。たとえば、最初のネイバーが同じ値を持っている場合に2番目のネイバーをチェックするなど、簡単にこれを実装してルールを絞り込むことができます。完全を期すために
、scipy.signal
、find_peaks_cwt
でより複雑な機能があるように思われます。私はそれを使用する経験はありませんので、あなたにそれについての詳細を与えることはできません。
その他のピーク検出アルゴリズムについては、https:// githubをチェックすることもできます。com/MonsieurV/py-findpeaks argrelextrema'は、アルゴリズムの振る舞いを変えたいときには、本当に簡単な選択ではありません。 –