[解決済み] アーグレレックストレマとフラットエキストレマ
質問
scipy.signalの関数argrelextremaが平坦な極値を検出しない。 例を示します。
import numpy as np
from scipy.signal import argrelextrema
data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 1, 0 ])
argrelextrema(data, np.greater)
(array([2]),)
最初の最大値(2)は検出され、2番目の最大値(3, 3)は検出されません。
この挙動に対する回避策はありますか? ありがとうございます。
解決方法を教えてください。
簡単にお答えします。
おそらく
argrelextrema
は、あなたのタスクに対して十分に柔軟ではありません。あなたのニーズに合った独自の関数を書くことを検討してください。
長い回答です。
を使用しなければならないのでしょうか?
argrelextrema
? もしそうであれば、その場合は
comparator
と
order
の引数は
argrelextrema
(を参照してください)。
参照
).
簡単な例では、以下のようにすればよいでしょう。
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]),)
の挙動は、おそらくあなたが望むものとは異なっており、最初の
3
と
4
を最大値とすると
argrelextrema
は、すべてのものが、その2つの最近傍のものよりも大きいか等しい最大値であるとみなすようになりました。これで
order
引数で、この比較が成立する隣人をいくつにするか決定します。
order=2
を見つけるだけで、上の例のように
4
を最大値とする。
>>> print(argrelextrema(data, np.greater_equal,order=2))
(array([2, 8]),)
しかし、これには欠点があります。もう一度、データを変えてみましょう。
>>> 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
というように
argrelextrema
よりも大きい2番目の近傍が見えています。
4
(ノイズの多いデータには有効ですが、必ずしもすべてのケースで期待される動作ではありません)。
使用方法
argrelextrema
の場合、常に固定数の隣接間での二項演算に制限されます。しかし、すべての
argrelextrema
は、上記の例でやっていることは
n
もし
data[n] > data[n-1] and data[n] > data[n+1]
. これを自分で実装して、例えば、1つ目の近傍が同じ値である場合に2つ目の近傍をチェックするなど、ルールを洗練させることも簡単にできます。
念のため、もっと凝った関数が
scipy.signal
,
find_peaks_cwt
. しかし、私は使用経験がないため、これ以上の詳細についてはお答えすることができません。
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 20: ordinal not in range(128)
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] PandasでDataFrameの行を反復処理する方法
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] 億の相対的輸入
-
[解決済み] pandasを使った "大量データ "ワークフロー【終了しました
-
[解決済み】__str__と__repr__の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonコンテナのための組み込み汎用関数操作
-
Python Decorator 練習問題
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Python jiabaライブラリの使用方法について説明
-
Pythonによるjieba分割ライブラリ
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない