Требуется программно найти количество и местоположение положительных пиков на графике.
Известно, что количество пиков нечетное. Обычно 3, 5 или 7. В данном случае 3. Также известно, что за каждым положительным пиком следует отрицательный.
Как лучше решить такую проблему на Python? Желательно без подбора коэффициентов
Дополнение: Данные всегда начинаются с положительного пика и заканчиваются отрицательным.
Данные представляют собой вертикальную проекцию изображения, обработанную функцией np.gradient(projection)/projection. То есть отношение второй производной функции к её высоте.
question@mail.ru
·
01.01.1970 03:00
Нахождение положительных пиков функции
answer@mail.ru
·
01.01.1970 03:00
Поскольку просто локальный экстремум не устраивает, надо добавить проверку превышения порога для отбраковки мелких пиков и артефактов. Порог можно вычислить как выборки, умноженное на некоторую константу, соответствующую доверительному интервалу для математического ожидания.
На практике эту константу принимают равной 2.5.
UPD
С учётом дополнительных условий задачи пиком следует считать максимум на отрезке от ""верха"" (начальной точки или первого значения выше q) до ""низа"" (первого значения ниже -q).
При этом для массива размерности n возможен следующий алгоритм:
- Найти СКО выборки и вычислить порог
q. - Положить
top=0. - Найти координату
bottomпервой точки отрезка[top, n-1]со значением меньше-q. Если такой точки нет, перейти к п.7. - Найти координату максимума на отрезке
[top, bottom-1]. Если значение максимума большеq, записать его в массив пиков. - Найти координату
topпервой точки отрезка[bottom+1, n-1]со значением большеq. Если такой точки нет, перейти к п.7. - Перейти к п.3.
- Использовать массив пиков.
Блоги
Какой Python-специалист самый востребованный?
Где и как эффективно учить Python: Лучшие курсы и интерактивные платформы для самостоятельного обучения
Как тестировать код в Python?
Как правильно обрабатывать ошибки в Python: от try-except-finally до ловли всех исключений