def parameter(): import eof year=eof.year() lat=eof.lat() myear=year.size mlat=lat.size return myear,mlat
def cal(month,pres): import eof import subroutine import numpy as np import pylab as pl import matplotlib.pyplot as plt myear,mlat=eof.parameter() data=eof.get_data(month,pres) pm=eof.get_pm(month,pres) ano=subroutine.array_avestd(data,'ano') # 偏差場行列の計算 cov=ano.transpose().dot(ano) # 共分散行列の計算 eigen_value,eigen_vector=np.linalg.eig(cov) # 固有値・固有ベクトルを求める contribution_ratio=eigen_value/sum(eigen_value)*100 lat=eof.lat() year=eof.year() mn=3 # 何番目のモードまで出力するか time_coe=np.ones((myear,mn)) for i in range(0,mn): print eigen_value[i],contribution_ratio[i] print eigen_vector[i] for j in range(0,myear): time_coe[j,i]=sum(ano[j,:]*eigen_vector[:,i]) # 各モード時系列プロット for i in range(0,mn): plt.plot(year,time_coe[:,i],label='mode'+str(i+1)) plt.xlim(year[0],year[year.size-1]) plt.legend() plt.savefig(pm+'_time-series.png') plt.show() # 各モード時系列プロット # 各モード緯度分布プロット for i in range(0,mn): plt.plot(lat,eigen_vector[:,i],label='mode'+str(i+1)) plt.legend() plt.savefig(pm+'_lat-distribution.png') plt.show()