num_surr = 1000 k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0, 2))) period = 8 * y # frequency of interest s0 = period / fourier_factor # get scale cond_means = np.zeros((8, )) def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) d, m, year = g.extract_day_month_year() difference = np.zeros((g.lats.shape[0], g.lons.shape[0])) mean_var = np.zeros_like(difference) for i in range(g.lats.shape[0]): for j in range(g.lons.shape[0]): wave, _, _, _ = wavelet_analysis.continous_wavelet( g.data[:, i, j], 1, False, wavelet_analysis.morlet, dj=0, s0=s0, j1=0, k0=k0) # perform wavelet
num_surr = 1000 k0 = 6. # wavenumber of Morlet wavelet used in analysis y = 365.25 # year in days fourier_factor = (4 * np.pi) / (k0 + np.sqrt(2 + np.power(k0,2))) period = 8 * y # frequency of interest s0 = period / fourier_factor # get scale cond_means = np.zeros((8,)) def get_equidistant_bins(): return np.array(np.linspace(-np.pi, np.pi, 9)) d, m, year = g.extract_day_month_year() difference = np.zeros((g.lats.shape[0], g.lons.shape[0])) mean_var = np.zeros_like(difference) for i in range(g.lats.shape[0]): for j in range(g.lons.shape[0]): wave, _, _, _ = wavelet_analysis.continous_wavelet(g.data[:,i,j], 1, False, wavelet_analysis.morlet, dj = 0, s0 = s0, j1 = 0, k0 = k0) # perform wavelet phase = np.arctan2(np.imag(wave), np.real(wave)) # get phases from oscillatory modes for iota in range(cond_means.shape[0]): # get conditional means for current phase range #phase_bins = get_equiquantal_bins(phase_temp) # equiquantal bins phase_bins = get_equidistant_bins() # equidistant bins ndx = ((phase[0,:] >= phase_bins[iota]) & (phase[0,:] <= phase_bins[iota+1])) if MEANS: cond_means[iota] = np.mean(g.data[ndx]) else:
net.get_continuous_phase(pool = pool) net.get_phase_fluctuations(rewrite = True, pool = pool) pool.close() pool.join() nao = DataField() raw = np.loadtxt("%sNAO.station.monthly.1865-2016.txt" % (path_to_data)) raw = raw[:, 1:] nao.data = raw.reshape(-1) nao.create_time_array(date_from = date(1865, 1, 1), sampling = 'm') nao.select_date(date(1949, 1, 1), date(2015, 1, 1)) nao.anomalise() jfm_index = nao.select_months([1,2,3], apply_to_data = False) jfm_nao = nao.data[jfm_index] _, _, y = nao.extract_day_month_year() y = y[jfm_index] ann_nao = [] for year in np.unique(y): ann_nao.append(np.mean(jfm_nao[np.where(year == y)[0]])) ann_nao = np.array(ann_nao) ann_phase_fluc = np.zeros([ann_nao.shape[0]] + list(net.get_spatial_dims())) for lat in range(net.lats.shape[0]): for lon in range(net.lons.shape[0]): jfm_data = net.phase[jfm_index, lat, lon] for i, year in zip(range(np.unique(y).shape[0]), np.unique(y)): ann_phase_fluc[i, lat, lon] = np.mean(jfm_data[np.where(year == y)[0]]) corrs = np.zeros_like(net.data[0, ...])
hw = [] cw = [] if JUST_SCALING: scaling_min = [] scaling_max = [] for i in range(phase_bins.shape[0] - 1): ndx = ((phase >= phase_bins[i]) & (phase <= phase_bins[i + 1])) data_temp = g.data[ndx].copy() #g.data[ndx].copy() time_temp = g.time[ndx].copy() max_temp = g_max.data[ndx].copy() min_temp = g_min.data[ndx].copy() tg_sat_temp = tg_sat[ndx].copy() if not JUST_SCALING: g_temp.time = time_temp.copy() _, m, _ = g_temp.extract_day_month_year() # positive extremes - 2sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 2 * sigma_max) result[i, 0] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 1] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 2] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 3] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # positive extremes - 3sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 3 * sigma_max) result[i, 4] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 5] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 6] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 7] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # negative extremes - 2sigma l_e = np.less_equal(data_temp, np.mean(g.data) - 2 * sigma_min) result[i, 8] = np.sum((m[l_e] == 12) | (m[l_e] <= 2)) # DJF
hw = [] cw = [] if JUST_SCALING: scaling_min = [] scaling_max = [] for i in range(phase_bins.shape[0] - 1): ndx = (phase >= phase_bins[i]) & (phase <= phase_bins[i + 1]) data_temp = g.data[ndx].copy() # g.data[ndx].copy() time_temp = g.time[ndx].copy() max_temp = g_max.data[ndx].copy() min_temp = g_min.data[ndx].copy() tg_sat_temp = tg_sat[ndx].copy() if not JUST_SCALING: g_temp.time = time_temp.copy() _, m, _ = g_temp.extract_day_month_year() # positive extremes - 2sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 2 * sigma_max) result[i, 0] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 1] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 2] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 3] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # positive extremes - 3sigma g_e = np.greater_equal(data_temp, np.mean(g.data) + 3 * sigma_max) result[i, 4] = np.sum((m[g_e] == 12) | (m[g_e] <= 2)) # DJF result[i, 5] = np.sum((m[g_e] > 2) & (m[g_e] <= 5)) # MAM result[i, 6] = np.sum((m[g_e] > 5) & (m[g_e] <= 8)) # JJA result[i, 7] = np.sum((m[g_e] > 8) & (m[g_e] <= 11)) # SON # negative extremes - 2sigma l_e = np.less_equal(data_temp, np.mean(g.data) - 2 * sigma_min) result[i, 8] = np.sum((m[l_e] == 12) | (m[l_e] <= 2)) # DJF
net.get_continuous_phase(pool=pool) net.get_phase_fluctuations(rewrite=True, pool=pool) pool.close() pool.join() nao = DataField() raw = np.loadtxt("%sWeMO.monthly.1821-2013.txt" % (path_to_data)) raw = raw[:, 1:] nao.data = raw.reshape(-1) nao.create_time_array(date_from=date(1821, 1, 1), sampling='m') nao.select_date(date(1949, 1, 1), date(2014, 1, 1)) nao.anomalise() jfm_index = nao.select_months([1, 2, 3], apply_to_data=False) jfm_nao = nao.data[jfm_index] _, _, y = nao.extract_day_month_year() y = y[jfm_index] ann_nao = [] for year in np.unique(y): ann_nao.append(np.mean(jfm_nao[np.where(year == y)[0]])) ann_nao = np.array(ann_nao) ann_phase_fluc = np.zeros([ann_nao.shape[0]] + list(net.get_spatial_dims())) for lat in range(net.lats.shape[0]): for lon in range(net.lons.shape[0]): jfm_data = net.phase[jfm_index, lat, lon] for i, year in zip(range(np.unique(y).shape[0]), np.unique(y)): ann_phase_fluc[i, lat, lon] = np.mean(jfm_data[np.where(year == y)[0]])