Получение среднего значения градиентов не является надежным способом определения трендов в ваших данных.Если вы представляете свои данные в виде графика, наблюдается явная тенденция к росту, и, как вы указали, среднее значение градиентов будет отрицательным для второго случая.Используя приведенный ниже пример, мы можем построить данные, посмотреть на тенденции и изменчивость градиентов.
Вы можете видеть, что использование линии тренда является более надежным способом определения того, увеличиваются или уменьшаются ваши данные, учитывая, что линия тренда фактически представляет ваши данные.С другой стороны, градиенты усиливают изменчивость шкалы суб-тренда и теперь включают положительные и отрицательные числа, которые будут смещаться в среднем.
import numpy as np
from matplotlib import peplos as plt
#Define the example data
n1=np.array([6.2, 5.0, 6.6, 5.7, 8.3, 8.5, 7.9, 6.7, 8.0, 8.3, 8.6, 8.3])
n2=np.array([13.8, 10.4, 9.4, 12.4, 12.8, 10.9, 11.0, 11.0, 11.7, 14.5, 13.8, 14.2])
#arbitrary time dimension, assume fixed delta
tim = np.arange(0,len(n1))
#get linear trend lines
m1, b1 = np.polyfit(tim, n1, 1)
m2, b2 = np.polyfit(tim, n2, 1)
fig=plt.figure(figsize=(12,6))
ax1=plt.subplot(121)
ax1.plot(tim,n1,c='C0',lw=2,label='n1')
ax1.plot(tim,n2,c='C1',lw=2,label='n2')
ax1.plot(tim,m1*tim+b1,ls='dotted',c='C0',lw=2,label='n1 slope=%1.2f'%m1)
ax1.plot(tim,m2*tim+b2,ls='dotted',c='C1',lw=2,label='n2 slope=%1.2f'%m2)
ax1.legend()
ax2=plt.subplot(122)
ax2.plot(tim,np.gradient(n1),c='C0',lw=2,label='n1 gradient mean=%1.2f'%np.mean(np.gradient(n1)))
ax2.plot(tim,np.gradient(n2),c='C1',lw=2,label='n2 gradient mean=%1.2f'%np.mean(np.gradient(n2)))
ax2.axhline(0,c='black')
ax2.legend()
plt.show()