Area Average#
Regional Cosine-Weighted Mean#
This section demonstrates how to compute a cosine-latitude-weighted average over a specified lat-lon region. This method accounts for the varying grid cell areas with latitude, ensuring an accurate spatial average.
📌 Function: regional_weighted_mean()
#
def regional_weighted_mean(data, lat1, lat2, lon1, lon2):
"""
Compute cosine-latitude-weighted regional mean over the specified lat-lon bounds.
Parameters
----------
data : xarray.DataArray
Input data with dimensions (time, lat, lon).
lat1, lat2 : float
Latitude bounds.
lon1, lon2 : float
Longitude bounds (either in -180 to 180 or 0 to 360).
Returns
-------
dat_region_mean : xarray.DataArray
Regional mean time series (time).
"""
# --- Longitude adjustment ---
target_lon_range = 'neg180_180' if lon1 < 0 or lon2 < 0 else '0_360'
if target_lon_range == 'neg180_180' and (data.lon > 180).any():
data = data.assign_coords(lon=((data.lon + 180) % 360 - 180)).sortby('lon')
elif target_lon_range == '0_360' and (data.lon < 0).any():
data = data.assign_coords(lon=(data.lon % 360)).sortby('lon')
# --- Select region ---
dat_region = data.sel(lat=slice(lat1, lat2), lon=slice(lon1, lon2))
# --- Apply cosine-latitude weighting ---
weights = np.cos(np.deg2rad(dat_region['lat']))
dat_region_mean = dat_region.weighted(weights).mean(dim=['lat', 'lon'], skipna=True)
# --- Assign name ---
dat_region_mean.name = f"regional_mean_{lat1}_{lat2}_{lon1}_{lon2}"
return dat_region_mean
📌 Example: Niño 3.4 Index Calculation#
# --- Calculate Niño 3.4 index from NDJFM seasonal data ---
nino34_ts = regional_weighted_mean(dat_NDJFM, -5, 5, 190, 240)
# --- Calculate standard deviation over the available years ---
nino34_std = nino34_ts.std(dim="year", skipna=True)
# --- Standardize the time series ---
nino34_ts_std = nino34_ts / nino34_std
# --- Update attributes ---
nino34_ts_std.attrs = nino34_ts.attrs.copy()
nino34_ts_std.attrs['note1'] = f"Standardized Niño 3.4 index. Standard deviation: {nino34_std.values:.3f}"
print(nino34_ts_std)
This process extracts a regional index (e.g., Niño 3.4 SST anomaly) and standardizes it to allow comparisons across time or with other variables.