一千萬個為什麽

搜索

在1D numpy數組中使用Numpy查找局部最大值/最小值

你能建議一個numpy/scipy的模塊函數,可以在1D numpy數組中找到局部最大值/最小值嗎?顯然,最簡單的方法是看看最近的鄰居,但我希望有一個公認的解決方案,這是numpy發行版的一部分。

最佳答案

In SciPy >= 0.11

import numpy as np
from scipy.signal import argrelextrema

x = np.random.random(12)

# for local maxima
argrelextrema(x, np.greater)

# for local minima
argrelextrema(x, np.less)

產生

>>> x
array([ 0.56660112,  0.76309473,  0.69597908,  0.38260156,  0.24346445,
    0.56021785,  0.24109326,  0.41884061,  0.35461957,  0.54398472,
    0.59572658,  0.92377974])
>>> argrelextrema(x, np.greater)
(array([1, 5, 7]),)
>>> argrelextrema(x, np.less)
(array([4, 6, 8]),)

註意,這些是x的索引,它們是局部最大/最小值。要獲取值,請嘗試:

>>> x[argrelextrema(x, np.greater)[0]]

scipy.signal also provides argrelmax and argrelmin for finding maxima and minima respectively.

轉載註明原文: 在1D numpy數組中使用Numpy查找局部最大值/最小值