find_peaksは、配列の開始時にピークを識別しません

Varlam:

私は、値が最大のn個前の数字よりも高い取得していない配列内の最初の位置を見つけるのベクトル化のアプローチを見つけようとしています。私は地元の最大値を見つけるために、scipy.signalのfind_peaks方法を使用して考えました。前回と今後の数字 - 私はそれはあなたができるように距離を定義した場合の10 nは10である。しかし、残念ながら、距離のための条件は両方向に満たされなければなら言う正確ことないと思います。そのようなAのものを見つけるための他の方法やアプローチはありますか?

例:

arr1 = np.array([1.        , 0.73381293, 0.75649351, 0.77693474, 0.77884614,
       0.81055903, 0.81402439, 0.78798586, 0.78839588, 0.82967961,
       0.8448    , 0.83276451, 0.82539684, 0.81762916, 0.82722515,
       0.82101804, 0.82871127, 0.82825041, 0.82086957, 0.8347826 ,
       0.82666665, 0.82352942, 0.81270903, 0.81191224, 0.83180428,
       0.84975767, 0.84044236, 0.85057473, 0.8394649 , 0.80000001,
       0.83870965, 0.83962262, 0.85039371, 0.83359748, 0.84019768,
       0.83281732, 0.83660132])

from scipy.signal import find_peaks
peaks, _ = find_peaks(arr1, distance=10)

この場合、位置10および27を発見しかし、また、位置0は高くない10個の以下の要素を有します。私はそれらをどのように見つけることができますか?

フレデリックボーデ:
def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)

def get_peaks(arr, window):
    maxss = np.argmax(rolling_window(arr1, window), axis=1)
    return np.where(maxss == 0)[0]
>>> arr1 = np.array([1.        , 0.73381293, 0.75649351, 0.77693474, 0.77884614,
       0.81055903, 0.81402439, 0.78798586, 0.78839588, 0.82967961,
       0.8448    , 0.83276451, 0.82539684, 0.81762916, 0.82722515,
       0.82101804, 0.82871127, 0.82825041, 0.82086957, 0.8347826 ,
       0.82666665, 0.82352942, 0.81270903, 0.81191224, 0.83180428,
       0.84975767, 0.84044236, 0.85057473, 0.8394649 , 0.80000001,
       0.83870965, 0.83962262, 0.85039371, 0.83359748, 0.84019768,
       0.83281732, 0.83660132])
>>> get_peaks(arr1, 10)
array([ 0, 10, 27])

:窓関数の圧延のためのクレジットnumpyの中の1Dアレイのローリング・ウィンドウを?

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=8809&siteId=1