Ejemplo n.º 1
0
        lat = np.flip(lat)
        vanom = np.flip(vanom, axis=1)

    # Detrend the variable (taken from calc_amv_hadisst.py)
    # ----------------------------------------------------
    start = time.time()
    indata = vanom.reshape(nmon, nlat * nlon).T  # Transpose to [Space x Time]
    okdata, knan, okpts = proc.find_nan(indata, 1)
    x = np.arange(0, nmon, 1)
    if detrend == 0:
        # Compute global weighted average
        glomean = proc.area_avg(vanom.transpose(2, 1, 0), [0, 360, -90, 90],
                                lon, lat, 1)

        # Regress back to the original data to get the global component
        beta, b = proc.regress_2d(glomean, okdata)

        # Subtract this from the original data
        okdt = okdata - beta[:, None]
    else:
        # Polynomial Detrend
        okdt, model = proc.detrend_poly(x, okdata, detrend)
        if debug:
            fig, ax = plt.subplots(1, 1)
            ax.scatter(x, okdata[44, :], label='raw')
            ax.plot(x, model[44, :], label='fit')
            ax.scatter(x, okdt[:, 44], label='dt')
            ax.set_title("Visualize Detrending Method %i" % detrend)
            #okdt = okdt.T

    data_dt = np.zeros((nmon, nlat * nlon)) * np.nan
Ejemplo n.º 2
0
usedtfunction = 1  # Set to 1 to use the new detrending function

if usedtfunction == 1:

    start = time.time()
    dt_hsst, ymodall, _, _ = proc.detrend_dim(hsstnew, 2)
    print("Detrended in %.2fs" % (time.time() - start))
else:

    # Reshape to [Time x Space] and remove NaN Points
    start = time.time()
    hsstnew = np.reshape(hsstnew, (360 * 180, 1176)).T
    hsstok, knan, okpts = proc.find_nan(hsstnew, 0)

    tper = np.arange(0, hsstok.shape[0])
    beta, b = proc.regress_2d(tper, hsstok)  # Perform regression

    # Detrend
    dt_hsst = hsstnew[:, okpts] - (beta[:, None] * tper + b[:, None]).T

    # Replace NaN vaues back into the system
    hsstall = np.zeros(hsstnew.shape) * np.nan
    hsstall[:, okpts] = dt_hsst

    # Also save the linear model
    ymodall = np.zeros(hsstnew.shape) * np.nan
    ymodall[:, okpts] = (beta[:, None] * tper + b[:, None]).T

    # Reshape again
    dt_hsst = np.reshape(hsstall.T, (360, 180, 1176))
    hsstnew = np.reshape(hsstnew.T, (360, 180, 1176))
Ejemplo n.º 3
0
# Get dimension sizes
nens, nyr, nlat, nlon = var.shape
npc = pcall.shape[2]

# Combine lat and lon dimensions
var = np.reshape(var, (nens, nyr, nlat * nlon))

#%% Regress for each mode and ensemble membe

varpattern = np.zeros((npc, nens, nlat * nlon))

for n in range(npc):
    for e in range(nens):

        pcin = pcall[e, :, n]
        datain = var[e, ...]
        varpattern[n, e, :], _ = proc.regress_2d(pcin, datain)

        msg = '\rCompleted Regression for PC %02i/%02i, ENS %02i/%02i' % (
            n + 1, npc, e + 1, nens)
        print(msg, end="\r", flush=True)

# Reshape variable [pc, ens, lat, lon]
varout = np.reshape(varpattern, (npc, nens, nlat, nlon))

F = np.copy(varout)

outname = datpath + "NAO_EAP_%s_ForcingDJFM.npy" % flux
np.save(outname, F)
Ejemplo n.º 4
0
flx = flx[:, [-1, 0, 1, 2], :].mean(1)  # Select DJFM

# Restrict PC (drop first 2 years due to ensolag + 3monwin, and end year due to 3monwin)
pcin = pcall[2:-1, :]

# Standardize PC
pcstd = pcin / np.std(pcin, 0)

# Preallocate
pattern = np.zeros((nlat * nlon, N_mode))  # [space x pc]

for p in range(N_mode):

    pc = pcstd[:, p]

    pattern[:, p], _ = proc.regress_2d(pc, flx, nanwarn=1)
    print("Regressed nhflx to PC %i" % (p + 1))

pattern = pattern.reshape(nlat, nlon, N_mode)

if debug:
    plt.pcolormesh(lon, lat, pattern[:, :, 0],
                   cmap=cmap), plt.colorbar(), plt.title("EOF 1"), plt.show()

#%% Do the same for PSL

# Read out psl values
psl_all = dsall.PSL.values

# Calculate DJFM Mean
ntime, nlat, nlon = psl_all.shape
Ejemplo n.º 5
0
        okdata, knan, okpts = proc.find_nan(varens, 1)
        okdatap, knanp, okptsp = proc.find_nan(varglo, 1)

        #% Perform EOF -------------
        _, pcs, varexpall[e, :] = proc.eof_simple(okdata, N_mode, 1)

        # Standardize pc before regression along the time dimension
        pcstd = np.squeeze(pcs / np.std(pcs, 0))

        #Loop for each mode... (NOte, can vectorize this to speed it up,.)
        psleofs = np.ones((192, 288, 3))

        for pcn in range(N_mode):

            # Regress back to SLP
            eofpatokp, _ = proc.regress_2d(pcstd[:, pcn], okdatap, nanwarn=0)

            # Reshape regression pattern and put back (for psl)
            eofpatp = np.ones((192 * 288)) * np.nan
            eofpatp[okptsp] = eofpatokp
            eofpatp = np.reshape(eofpatp, (192, 288))

            # ----- Check Sign start -----
            if pcn == 0:
                # Check the signs and flip if necessary
                # EOF 1 only (need to figure out the other EOFs..)
                # First check using reykjavik
                rboxlon = np.where((lon >= lonReykjavik - tol)
                                   & (lon <= lonReykjavik + tol))[0]
                rboxlat = np.where((lat >= latReykjavik - tol)
                                   & (lat <= latReykjavik + tol))[0]