Boxen loswerden, die nicht in den Argo-Daten-Median passen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Python_Berry
User
Beiträge: 1
Registriert: Samstag 11. März 2023, 18:42

Hallo :)

Ich muss die Anomalien für den Atlantic Meridional Mode (AMM) darstellen. Da sich die Argo-Daten nicht auf einem Raster befinden, habe ich eines erstellt und den Median einer Box um jeden Rasterpunkt erhalten, um ihre Werte zu erhalten. Aber das schafft einige Boxen, die nicht wirklich in den Rest passen. Wenn ich nur die Medianfelder plotte, ist dies nicht zu offensichtlich, aber wenn ich die Anomalien für die positiven oder negativen Phasen des AMM plotte, werden sie offensichtlicher. Wie kann ich sie loswerden?

[Median][/https://i.stack.imgur.com/s8LIm.png]

[Anomalie][/https://i.stack.imgur.com/qxquV.png]

Ich habe bereits versucht, einfach die Mediane der Daten innerhalb des Interquartils jeder Box darzustellen, aber das löst das Problem nicht.

Code: Alles auswählen

[/def get_median(lat, lon, lat_step, lon_step, lat_data, lon_data, CT_data, SA_data, mld_data):
    mean_mld = np.full((len(lat), len(lon)), np.nan)
    mean_CT = np.full((len(lat), len(lon)), np.nan)
    mean_SA = np.full((len(lat), len(lon)), np.nan)
    
    for i, lat_val in enumerate(lat):
        for j, lon_val in enumerate(lon):
            gef = (lat_data >= lat_val - lat_step) & (lat_data <= lat_val + lat_step) & (lon_data >= lon_val - lon_step) & (lon_data <= lon_val + lon_step)
            n_values = len(np.where(gef)[0])
            if n_values >= 5:
                mean_mld[i, j] = np.nanmedian(np.array(mld_data)[gef])
                mean_CT[i, j] = np.nanmedian(np.array(CT_data)[gef])
                mean_SA[i, j] = np.nanmedian(np.array(SA_data)[gef])
            else:
                mean_mld[i, j] = np.nan
                mean_CT[i, j] = np.nan
                mean_SA[i, j] = np.nan
    
    return mean_mld, mean_CT, mean_SA
    
    
    
def get_median_iqr(lat, lon, lat_step, lon_step, lat_data, lon_data, CT_data, SA_data, mld_data):
    median_mld = np.full((len(lat), len(lon)), np.nan)
    median_CT = np.full((len(lat), len(lon)), np.nan)
    median_SA = np.full((len(lat), len(lon)), np.nan)
    
    for i, lat_val in enumerate(lat):
        for j, lon_val in enumerate(lon):
            gef = (lat_data >= lat_val - lat_step) & (lat_data <= lat_val + lat_step) & (lon_data >= lon_val - lon_step) & (lon_data <= lon_val + lon_step)
            n_values = len(np.where(gef)[0])
            if n_values >= 5:
                data_mld = mld_data[gef]
                data_CT = CT_data[gef]
                data_SA = SA_data[gef]
                
                mld_q25, mld_q75 = np.nanpercentile(mld_data, [25, 75])
                CT_q25, CT_q75 = np.nanpercentile(CT_data, [25, 75])
                SA_q25, SA_q75 = np.nanpercentile(SA_data, [25, 75])
                
                median_mld[i, j] = np.nanmedian(data_mld[(data_mld >= mld_q25) & (data_mld <= mld_q75)])
                median_CT[i, j] = np.nanmedian(data_CT[(data_CT >= CT_q25) & (data_CT <= CT_q75)])
                median_SA[i, j] = np.nanmedian(data_SA[(data_SA >= SA_q25) & (data_SA <= SA_q75)])
            else:
                median_mld[i, j] = np.nan
                median_CT[i, j] = np.nan
                median_SA[i, j] = np.nan
    
    return median_mld, median_CT, median_SA]
    
 Wäre toll, wenn mir da jemand helfen könnte  :)
Antworten