Какие вершины у списка

Можно ли каким то простым способом определить количество вершин в списке y (в данном случае отдельно 5 верхних и 5 нижних)? y генерирую кодом ниже (x использовать не буду и на f = 5 не ориентироваться):

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

Fs = 800
f = 5
sample = 800
x = np.arange(sample)
y = np.sin(2 * np.pi * f * x / Fs)

plt.plot(y)
plt.show()

введите сюда описание изображения


Ответы (2 шт):

Автор решения: GrAnd

Один из вариантов:

from scipy.signal import argrelextrema
    
#...

maximums = argrelextrema(y, np.greater)[0].size
minimums = argrelextrema(y, np.less)[0].size

Или вручную:

maximums = np.sum((y[1:-1] > y[:-2]) & (y[1:-1] > y[2:]))
minimums = np.sum((y[1:-1] < y[:-2]) & (y[1:-1] < y[2:]))
→ Ссылка
Автор решения: passant

Да вариантов на самом деле масса - даже не используя collections.

Например:

Раз:

mxs = [i for i,ex in enumerate(y) if ex == y.max()]
print(len(mxs ))

Два:

print(np.sum(y==y.max()))

Три: - Обратим внимание на то, что тема вопроса "Какие вершины у списка", а в самом вопросе при этом фигурируют массивы numpy. И вернемся к теме, т.е. поиске в СПИСКЕ, то (первый оператор - просто возврат от массива к списку, т.е. сам ответ - во втором операторе):

y_l=list(y)
y_l.count(max(y_l))

Во всех случаях ответ 5.

Для минимума, надеюсь, сможете по аналогии написать самостоятельно.

→ Ссылка