def plot_nao_correlations(): # load geo-field gf = GeoField() gf.load('data/pres.mon.mean.nc', 'pres') gf.transform_to_anomalies() gf.normalize_monthly_variance() gf.slice_spatial(None, [20, 89]) gf.slice_date_range(date(1950, 1, 1), date(2012, 3, 1)) with open(FILE_NAME_COMPS, 'r') as f: d = cPickle.load(f) # unroll the data data = gf.data() data = np.transpose(np.reshape(data, (data.shape[0], data.shape[1] * data.shape[2]))) # load the monthly NAO index nao = np.loadtxt('data/nao_index.tim.txt', skiprows = 0) naoh = np.loadtxt('data/nao_index_hurrel.tim.txt', skiprows = 0) naoh_ndx = naoh[:, 2] nao_ndx = nao[:, 2] print nao_ndx.shape print naoh_ndx.shape ts_len = min(len(nao_ndx), len(naoh_ndx)) nao_ndx = nao_ndx[:ts_len] naoh_ndx = naoh_ndx[:ts_len] mn = d['mean'] mn = mn / np.sum(mn**2, axis = 0) ** 0.5 Nc = mn.shape[1] ts = np.transpose(np.dot(mn.T, data)) ts = ts[:ts_len, :] Cnao = np.zeros((Nc,)) Cnaoh = np.zeros((Nc,)) for i in range(Nc): Cnao[i] = np.corrcoef(nao_ndx, ts[:, i], rowvar = False)[0,1] Cnaoh[i] = np.corrcoef(naoh_ndx, ts[:, i], rowvar = False)[0,1] f = plt.figure() # plt.plot(nao_ndx, 'r-') # plt.plot(naoh_ndx, 'b-') plt.plot(np.arange(Nc) + 1, Cnao, 'ro-') plt.plot(np.arange(Nc) + 1, Cnaoh, 'go-') plt.legend(('NAO/PC', 'NAO/Stat.')) plt.xlabel('Component index [-]') plt.ylabel('NAO correlation [-]') f.savefig('figs/slp_nh_nao_correlation.pdf') print('Max station NAO correlation: %g at %d' % (np.amax(np.abs(Cnaoh)), np.argmax(np.abs(Cnaoh)))) print('Max PC/NAO correlation: %g at %d' % (np.amax(np.abs(Cnao)), np.argmax(np.abs(Cnao))))
#gf.slice_spatial(None, [20, 87]) # northern hemisphere, extratropical gf.slice_spatial(None, [-88, 88]) #gf.slice_months([12, 1, 2]) #S = np.zeros(shape = (5, 10), dtype = np.int32) #S[1:4, 0:2] = 1 #S[0:3, 6:9] = 2 #v, Sr = constructVAR(S, [0.0, 0.191, 0.120], [-0.1, 0.1], [0.00, 0.00], [0.01, 0.01]) #ts = v.simulate(768) #gf = make_model_geofield(S, ts) # initialize a parallel pool pool = Pool(POOL_SIZE) # compute components for data Ud, sd, Vtd = pca_components_gf(gf.data()) Ud = Ud[:, :NUM_COMPONENTS] Ur, _, its = orthomax(Ud) print("Finished after %d iterations." % its) t_start = datetime.now() LNO_COUNT = len(gf.tm) // LNO_PAR #LNO_COUNT = 4 print("Running leave one out analysis [%d samples] at %s" % (LNO_COUNT, str(t_start))) # initialize maximal and minimal boostraps EXTREMA_MEMORY = math.ceil(DISCARD_RATE * LNO_COUNT) max_comp = np.tile(np.abs(Ur.copy()), (EXTREMA_MEMORY + BULK_STEP, 1, 1)) min_comp = np.tile(np.abs(Ur.copy()), (EXTREMA_MEMORY + BULK_STEP, 1, 1))
import matplotlib.pyplot as plt import scipy.io as sio if __name__ == '__main__': # load geo-field gf = GeoField() gf.load('data/pres.mon.mean.nc', 'pres') gf.transform_to_anomalies() gf.normalize_monthly_variance() # gf.slice_spatial(None, [20, 89]) gf.slice_date_range(date(1950, 1, 1), date(2012, 3, 1)) # unroll the data ts = gf.data() # load the monthly NAO index nao = np.loadtxt('data/nao_index.tim.txt', skiprows = 0) naoh = np.loadtxt('data/nao_index_hurrel.tim.txt', skiprows = 0) naoh_ndx = naoh[:, 2] nao_ndx = nao[:naoh_ndx.shape[0], 2] print nao_ndx.shape print naoh_ndx.shape ts = ts[:naoh_ndx.shape[0], :, :] #compute the correlation map to NAO C = np.zeros_like(gf.d[0, :, :])
def plot_nao_correlations(): # load geo-field gf = GeoField() gf.load('data/pres.mon.mean.nc', 'pres') gf.transform_to_anomalies() gf.normalize_monthly_variance() gf.slice_spatial(None, [20, 89]) gf.slice_date_range(date(1950, 1, 1), date(2012, 3, 1)) with open(FILE_NAME_COMPS, 'r') as f: d = cPickle.load(f) # unroll the data data = gf.data() data = np.transpose( np.reshape(data, (data.shape[0], data.shape[1] * data.shape[2]))) # load the monthly NAO index nao = np.loadtxt('data/nao_index.tim.txt', skiprows=0) naoh = np.loadtxt('data/nao_index_hurrel.tim.txt', skiprows=0) naoh_ndx = naoh[:, 2] nao_ndx = nao[:, 2] print nao_ndx.shape print naoh_ndx.shape ts_len = min(len(nao_ndx), len(naoh_ndx)) nao_ndx = nao_ndx[:ts_len] naoh_ndx = naoh_ndx[:ts_len] mn = d['mean'] mn = mn / np.sum(mn**2, axis=0)**0.5 Nc = mn.shape[1] ts = np.transpose(np.dot(mn.T, data)) ts = ts[:ts_len, :] Cnao = np.zeros((Nc, )) Cnaoh = np.zeros((Nc, )) for i in range(Nc): Cnao[i] = np.corrcoef(nao_ndx, ts[:, i], rowvar=False)[0, 1] Cnaoh[i] = np.corrcoef(naoh_ndx, ts[:, i], rowvar=False)[0, 1] f = plt.figure() # plt.plot(nao_ndx, 'r-') # plt.plot(naoh_ndx, 'b-') plt.plot(np.arange(Nc) + 1, Cnao, 'ro-') plt.plot(np.arange(Nc) + 1, Cnaoh, 'go-') plt.legend(('NAO/PC', 'NAO/Stat.')) plt.xlabel('Component index [-]') plt.ylabel('NAO correlation [-]') f.savefig('figs/slp_nh_nao_correlation.pdf') print('Max station NAO correlation: %g at %d' % (np.amax(np.abs(Cnaoh)), np.argmax(np.abs(Cnaoh)))) print('Max PC/NAO correlation: %g at %d' % (np.amax(np.abs(Cnao)), np.argmax(np.abs(Cnao))))
import cPickle import matplotlib.pyplot as plt import scipy.io as sio if __name__ == '__main__': # load geo-field gf = GeoField() gf.load('data/pres.mon.mean.nc', 'pres') gf.transform_to_anomalies() gf.normalize_monthly_variance() # gf.slice_spatial(None, [20, 89]) gf.slice_date_range(date(1950, 1, 1), date(2012, 3, 1)) # unroll the data ts = gf.data() # load the monthly NAO index nao = np.loadtxt('data/nao_index.tim.txt', skiprows=0) naoh = np.loadtxt('data/nao_index_hurrel.tim.txt', skiprows=0) naoh_ndx = naoh[:, 2] nao_ndx = nao[:naoh_ndx.shape[0], 2] print nao_ndx.shape print naoh_ndx.shape ts = ts[:naoh_ndx.shape[0], :, :] #compute the correlation map to NAO C = np.zeros_like(gf.d[0, :, :])
gf.slice_spatial(None, [-88, 88]) #gf.slice_months([12, 1, 2]) #S = np.zeros(shape = (5, 10), dtype = np.int32) #S[1:4, 0:2] = 1 #S[0:3, 6:9] = 2 #v, Sr = constructVAR(S, [0.0, 0.191, 0.120], [-0.1, 0.1], [0.00, 0.00], [0.01, 0.01]) #ts = v.simulate(768) #gf = make_model_geofield(S, ts) # initialize a parallel pool pool = Pool(POOL_SIZE) # compute components for data Ud, sd, Vtd = pca_components_gf(gf.data()) Ud = Ud[:, :NUM_COMPONENTS] Ur, _, its = orthomax(Ud) print("Finished after %d iterations." % its) t_start = datetime.now() LNO_COUNT = len(gf.tm) // LNO_PAR #LNO_COUNT = 4 print("Running leave one out analysis [%d samples] at %s" % (LNO_COUNT, str(t_start))) # initialize maximal and minimal boostraps EXTREMA_MEMORY = math.ceil(DISCARD_RATE * LNO_COUNT) max_comp = np.tile(np.abs(Ur.copy()), (EXTREMA_MEMORY + BULK_STEP, 1, 1)) min_comp = np.tile(np.abs(Ur.copy()), (EXTREMA_MEMORY + BULK_STEP, 1, 1)) mean_comp = np.zeros_like(Ur)
plt.savefig('figs/slp_nh_component_clusters_with_centers.pdf', bbox_inches = 'tight', pad_inches = 0.5) if __name__ == '__main__': # load geo-field gf = GeoField() gf.load('data/pres.mon.mean.nc', 'pres') gf.transform_to_anomalies() gf.normalize_monthly_variance() gf.slice_spatial(None, [20, 89]) gf.slice_date_range(date(1950, 1, 1), date(2012, 3, 1)) # unroll the data data = gf.data() data = np.transpose(np.reshape(data, (data.shape[0], data.shape[1] * data.shape[2]))) # load the monthly NAO index nao = np.loadtxt('data/nao_index.tim.txt', skiprows = 0) print(nao.shape) nao_ndx = nao[:745, 2] naoh = np.loadtxt('data/nao_index_hurrel.tim.txt', skiprows = 0) print(naoh.shape) naoh_ndx = naoh[:745, 2] # load the components with open(FILE_COMPS, 'r') as f: d = cPickle.load(f)
# plt.figure() # plt.subplot(1,2,1) # plt.imshow(np.corrcoef(ts, rowvar = 0), interpolation = 'nearest') # plt.colorbar() # plt.subplot(1,2,2) # plt.imshow(S, interpolation = 'nearest') # plt.colorbar() # with open('data/test_gf.bin', 'r') as f: # d = cPickle.load(f) # initialize a parallel pool pool = Pool(POOL_SIZE) # compute the eigenvalues/eigenvectos of the covariance matrix of d = gf.data() if COSINE_REWEIGHTING: d = d * gf.qea_latitude_weights() Ud, dlam, _ = pca_components_gf(d) Ud = Ud[:, :NUM_EIGS] dlam = dlam[:NUM_EIGS] sd = SurrGeoFieldAR([0, 30], 'sbc') sd.copy_field(gf) sd.prepare_surrogates(pool) slam = np.zeros((NUM_SURR, NUM_EIGS)) maxU = np.zeros((NUM_SURR, NUM_EIGS)) # generate and compute eigenvalues for 20000 surrogates t1 = datetime.now()
bbox_inches='tight', pad_inches=0.5) if __name__ == '__main__': # load geo-field gf = GeoField() gf.load('data/pres.mon.mean.nc', 'pres') gf.transform_to_anomalies() gf.normalize_monthly_variance() gf.slice_spatial(None, [20, 89]) gf.slice_date_range(date(1950, 1, 1), date(2012, 3, 1)) # unroll the data data = gf.data() data = np.transpose( np.reshape(data, (data.shape[0], data.shape[1] * data.shape[2]))) # load the monthly NAO index nao = np.loadtxt('data/nao_index.tim.txt', skiprows=0) print(nao.shape) nao_ndx = nao[:745, 2] naoh = np.loadtxt('data/nao_index_hurrel.tim.txt', skiprows=0) print(naoh.shape) naoh_ndx = naoh[:745, 2] # load the components with open(FILE_COMPS, 'r') as f: d = cPickle.load(f)