예제 #1
0
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
예제 #2
0
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:
예제 #3
0
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, ...])
예제 #4
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
예제 #5
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
예제 #6
0
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]])