È inoltre possibile utilizzare di NumPy polyfit: si
data = np.array([[1,5], [2,10], [3,15], [4,20], [5,25]])
fit = np.polyfit(data[:,0], data[:,1] ,1) #The use of 1 signifies a linear fit.
fit
[ 5.00000000e+00 1.58882186e-15] #y = 5x + 0
line = np.poly1d(fit)
new_points = np.arange(5)+6
new_points
[ 6, 7, 8, 9, 10]
line(new_points)
[ 30. 35. 40. 45. 50.]
Questo permette di modificare il grado del polinomio abbastanza facilmente come la funzione polyfit
prendono i seguenti argomenti np.polyfit(x data, y data, degree)
. Viene mostrato un adattamento lineare in cui l'array restituito assomiglia a fit[0]*x^n + fit[1]*x^(n-1) + ... + fit[n-1]*x^0
per qualsiasi grado n
. La funzione poly1d
consente di trasformare questo array in una funzione che restituisce il valore del polinomio a qualsiasi valore x
.
In generale l'estrapolazione senza un modello ben compreso avrà risultati sporadici nella migliore delle ipotesi.
Esponenziale curve fitting.
from scipy.optimize import curve_fit
def func(x, a, b, c):
return a * np.exp(-b * x) + c
x = np.linspace(0,4,5)
y = func(x, 2.5, 1.3, 0.5)
yn = y + 0.2*np.random.normal(size=len(x))
fit ,cov = curve_fit(func, x, yn)
fit
[ 2.67217435 1.21470107 0.52942728] #Variables
y
[ 3. 1.18132948 0.68568395 0.55060478 0.51379141] #Original data
func(x,*fit)
[ 3.20160163 1.32252521 0.76481773 0.59929086 0.5501627 ] #Fit to original + noise
possibile duplicato di [Come fare scipy.interpolate dare un risultato estrapolata al di là del campo di ingresso?] (Http: // StackOverflow.com/domande/2745329/how-to-make-SciPy-interpolare-dare-an-estrapolato-risultato-là-the-input-gamma) – Yoann
I dizionari sono collezioni non ordinate, così il vostro "ordine sempre ascendente" osservazione può essere un ipotesi pericolosa, dal momento che 'for key in d' itererà sui tasti, ma Python lo ritiene opportuno, non nell'ordine in cui li hai creati. – Jaime
Intendevo di più in termini di dati, poiché in ogni chiave numericamente più alta ha un valore numericamente più alto – corvid