J'ai des données qui décrivent une série comme ça:Trouver où une fonction commence et se termine pour diminuer
Je suis intéressé par le calcul des points où les forts de début et de fin décroissantes. Comme ça:
Je calcuted la dérivée seconde de ma fonction et obtenir les points quand il a minima négatif (commencer à diminuer) et un maximum positif.
Mais ce que j'obtenir dans la plupart des cas est similaire à celle:
Où suis-je tort?
Ici il y a mon code python:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import InterpolatedUnivariateSpline
# set x and y
y = data_series
x = range(len(data_series))
# interpolation
f = InterpolatedUnivariateSpline(x, y)
# gen function points
new_x = np.linspace(min(x), max(x), num=1000, endpoint=True)
new_y = f(new_x)
# calculate second derivative
y_df1 = np.insert(np.diff(y), 0, 0)
y_df2 = np.insert(np.diff(y_df1), 0, 0)
# points where the decrease starts and ends
# (where the second derivative is minimum and maximum)
x_dec = np.where(y_df2 == min(y_df2))[0][0]
x_inc = np.where(y_df2 == max(y_df2))[0][0]
# plot
plt.plot(new_x, new_y, 'b', lw=3, alpha=0.7)
plt.plot(x_dec, f(x_dec), 'ro', ms= 8)
plt.plot(x_inc, f(x_inc),'ro', ms=8)
plt.show()
Le premier point sur le graphique est où la dérivée seconde n'est pas la plus proche de zéro, mais est sur son minimum (et une valeur négative). Cependant, y at-il un moyen d'attraper le point sur la courbe (devrait être x autour de 50) où la diminution commence? – Ewybe
Vous voulez dire quelque chose comme 'np.where (y_df1 <0) [0] [0]'? Cela vous donnera le premier index où la première dérivée de 'y' est négative. (Remplacer '<0' par'
acdr