2017-10-08 6 views
-2

Merci pour l'utilisateur Eduard Ilyasov aide-moi il y a quelques jourscomment utiliser Numpy.polyfit pour tracer tendance

Maintenant, je suis un résultat, mais je compris à peine ces

je tentais de calculer la tendance de la température de 1979 à 2016.

#calculate trend 
    ####numpy.ployfit 
    nmon = nyr * 12 
    tdum = MA.arange(0,nmon) 
    ntimes, ny, nx = tempF.shape 
#ntimes is time, ny is latitude, nx is longitude 
print tempF.shape 

trend = MA.zeros((ny,nx), dtype='2f') 
#trend = MA.zeros((ny,nx),dtype=float) 

print trend.shape 

for y in range (0,ny): 
    for x in range (0,nx): 
     trend[y,x]= numpy.polyfit(tdum, tempF[:,y,x],1) 

print trend.shape 
print trend 

ce sont des résultats:

(
(456, 241, 480) 
(241, 480, 2) 
(241, 480, 2) 
[[[ 0.00854342 -1.94362879] 
    [ 0.00854342 -1.94362879] 
    [ 0.00854342 -1.94362879] 
    ..., 
    [ 0.00854342 -1.94362879] 
    [ 0.00854342 -1.94362879] 
    [ 0.00854342 -1.94362879]] 

[[ 0.00824162 -1.87496781] 
    [ 0.00824792 -1.87640166] 
    [ 0.00825524 -1.87806702] 
    ..., 
    [ 0.00822667 -1.87156749] 
    [ 0.00823172 -1.87271607] 
    [ 0.0082366 -1.87382615]] 

[[ 0.00767854 -1.7468679 ] 
    [ 0.00769076 -1.74964726] 
    [ 0.00770384 -1.75262356] 
    ..., 
    [ 0.00764879 -1.74010038] 
    [ 0.00765911 -1.74244869] 
    [ 0.00766829 -1.74453557]] 

..., 
[[-0.0025295 0.57546186] 
    [-0.00252633 0.57474071] 
    [-0.00252274 0.57392275] 
    ..., 
    [-0.00253488 0.57668549] 
    [-0.00253269 0.57618785] 
    [-0.00253125 0.57585901]] 

[[-0.00315533 0.71783835] 
    [-0.00315261 0.71721852] 
    [-0.00314936 0.71648043] 
    ..., 
    [-0.00315671 0.71815109] 
    [-0.00315621 0.71803892] 
    [-0.00315584 0.71795386]] 

[[-0.00309109 0.7032221 ] 
    [-0.00309109 0.7032221 ] 
    [-0.00309109 0.7032221 ] 
    ..., 
    [-0.00309109 0.7032221 ] 
    [-0.00309109 0.7032221 ] 
    [-0.00309109 0.7032221 ]]] 

ce que je COMPRENDRE ood que la deuxième valeur dans chaque parenthèse devrait être les coefficients que la valeur de la tendance, mais je ne comprends pas la forme de la tendance. Quelle est la signification du premier nombre dans chaque [], et quelle est la valeur de la tendance que je devrais utiliser pour tracer la carte de tendance?

Merci beaucoup si vous pouvez me aider

Répondre

0

Si vous lisez la documentation numpy.polyfit() plus loin, vous verrez la définition de cette fonction

La solution minimise l'erreur quadratique

E = \ {sum_ j = 0}^k | p (x_j) - y_j |^2

dans les équations:

x[0]**n * p[0] + ... + x[0] * p[n-1] + p[n] = y[0] 
x[1]**n * p[0] + ... + x[1] * p[n-1] + p[n] = y[1] 
... 
x[k]**n * p[0] + ... + x[k] * p[n-1] + p[n] = y[k] 

Pour votre cas où la tendance est linéaire signifie que trend[y,x,0] est la valeur de tendance (aussi appelée la pente ) et trend[y,x,1] est l'interception .

Pour une illustration Prenons l'exemple suivant:

import numpy as np 
from matplotlib import pyplot as plt 
N = 10 
xs = np.random.random(N) 
ys = np.random.random(N) 
trend = np.polyfit(xs,ys,1) 
plt.plot(xs,ys,'o') 
plt.plot(xs,trend[1]+trend[0]*xs) 

Trend line for random inputs