Я пишу код, который включает алгоритм поиска локальных максимальных / минимальных значений в массиве. Но мне не удалось найти нужную функцию.
Сначала я использовал argrelextrema
в scipy.signal
.
b = [6, 1, 3, 5, 5, 3, 1, 2, 2, 3, 2, 1, 1, 9, 10, 10, 9, 8, 7, 7, 13, 10]
scipy.signal.argrelextrema(np.array(b), np.greater)
scipy.signal.argrelextrema(np.array(b), np.greater_equal)
scipy.signal.argrelextrema(np.array(b), np.greater_equal, order=2)
Результат
(array([ 9, 20], dtype=int64),)
(array([ 0, 3, 4, 7, 9, 14, 15, 20], dtype=int64),)
(array([ 0, 3, 4, 9, 14, 15, 20], dtype=int64),)
Первый не поймал b[3]
(или b[4]
). Поэтому я изменил его на второй, используя np.greater_equal
. Однако в этом случае первое значение b[0]
также обрабатывается как локальный максимум, и значение 2 в b[7]
включается. Используя третий, я мог бы выбросить b[7]
. Но order=2
по-прежнему имеет проблему, когда данные похожи на [1, 3, 1, 4, 1]
(он не может поймать 3)
Мой ожидаемый результат
[3(or 4), 9, 14(or 15), 20]
Я хочу поймать только одного из b[3], b[4]
(то же значение). Я хочу, чтобы некоторые проблемы argrelextrema
, о которых я говорил выше, были решены. Код ниже успешно выполнен.
scipy.signal.find_peaks(b)
результат [3, 9, 14, 20]
.
Код, который я пишу, обрабатывает пару локального максимума и локального минимума. Поэтому я хочу найти локальный минимум таким же образом. Есть ли какая-нибудь функция типа scipy.signal.find_peaks
для поиска локального минимума?