Если вас интересует только определение плато, восхождений и спусков в серии, проще всего использовать функцию numpy.diff
для вычисления n-й дискретной разности.Затем вы можете использовать numpy.sign
для преобразования различий в положительные (подъемы), нулевые (плато) или отрицательные (спуски).
Пример:
a = np.random.randint(1, 5, 10)
#array([1, 1, 1, 1, 3, 4, 2, 2, 2, 2])
diff = np.diff(a)
#array([ 0, 0, 0, 2, 1, -2, 0, 0, 0])
gradient = np.sign(diff)
#array([ 0, 0, 0, 1, 1, -1, 0, 0, 0])
Обратите внимание, что конечный массив gradient
будет иметь на один элемент меньше, чем исходный массив, поскольку функция numpy.diff
будет возвращать (n-1) различий для массива длины n.