2017-10-08 201 views
-2

感謝用戶愛德華Ilyasov幫我前幾天如何使用Numpy.polyfit繪製趨勢

現在,我得到了一些成績,但我很難理解這些

我試圖計算溫度的趨勢從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 

這些結果:

(
(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 ]]] 

我underst什麼那麼在每個括號中的第二個值應該是趨勢值的係數,但我不瞭解趨勢的形狀。每個[]中的第一個數字的含義是什麼?我應該用什麼趨勢值來繪製趨勢圖?

非常感謝你,如果你能幫助我

回答

0

如果你讀了numpy.polyfit()文檔進一步,你會看到這個功能

該解決方案的定義,減少誤差平方

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

等式:

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] 

對於你的情況下的趨勢是線性這意味着trend[y,x,0]趨勢(也稱爲斜率)和trend[y,x,1]值的截距

對於說明考慮下面的例子:

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