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))))
예제 #5
0
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()
예제 #9
0
                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)