def DMI(fy, ly, product_n):    # 時系列データを得る練習として、DMIを計算してみる。
	npz_dir = subroutine.get_npz_dir(product_n)
	fname = npz_dir + 'DMI-' + str(fy) + str(ly) + '.npz'
	print fname

	if os.path.exists(fname) == False:
		etseries = np.ones([ly - fy + 1, 12])
		wtseries = np.ones([ly - fy + 1, 12])
		for iye in range(fy, ly + 1):
			for itime in range(1, 13):
				etseries[iye - fy, itime - 1] = get_area_mean_data(0, iye, itime, 't', 1, 'hoge', 'eDMI', product_n)
				wtseries[iye - fy, itime - 1] = get_area_mean_data(0, iye, itime, 't', 1, 'hoge', 'wDMI', product_n)

		ano_et = subroutine.array_avestd(etseries, 'ano')
		ano_et = to_oneline(ano_et)
		ano_et = running_mean(ano_et, 5)
		ano_wt = subroutine.array_avestd(wtseries, 'ano')
		ano_wt = to_oneline(ano_wt)
		ano_wt = running_mean(ano_wt, 5)
		dmi = ano_wt - ano_et
		# dmi_oneline=to_oneline(dmi)
		ym = ts.ym_timeseries02(fy, ly)
		np.savez(fname, ym = ym, dmi = dmi)

	else:
		pass

	npload = np.load(fname)
	ym = npload['ym']
	dmi = npload['dmi']

	return dmi, ym
Esempio n. 2
0
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()