Hi @Shrad-Shukla1 and @Yoon-Eric
(edited on April 30)
Okay, (xr_da * aw_factor).mean(dim=[lon_name, lat_name]) calculates the areal-weighted average per grid cell. see below example.
|
def calc_spatial_mean( |
|
xr_da, lon_name="longitude", lat_name="latitude", radius=EARTH_RADIUS |
|
): |
|
""" |
|
Calculate spatial mean of xarray.DataArray with grid cell weighting. |
|
|
|
Parameters |
|
---------- |
|
xr_da: xarray.DataArray |
|
Data to average |
|
lon_name: str, optional |
|
Name of x-coordinate |
|
lat_name: str, optional |
|
Name of y-coordinate |
|
radius: float |
|
Radius of the planet [metres], currently assumed spherical (not important anyway) |
|
|
|
Returns |
|
------- |
|
Spatially averaged xarray.DataArray. |
|
""" |
|
lon = xr_da[lon_name].values |
|
lat = xr_da[lat_name].values |
|
|
|
area_weights = grid_cell_areas(lon, lat, radius=radius) |
|
aw_factor = area_weights / area_weights.max() |
|
|
|
return (xr_da * aw_factor).mean(dim=[lon_name, lat_name]) |
Hi @Shrad-Shukla1 and @Yoon-Eric
(edited on April 30)
Okay,
(xr_da * aw_factor).mean(dim=[lon_name, lat_name])calculates the areal-weighted average per grid cell. see below example.libraries/python_functions/spatial_aggregation.py
Lines 297 to 324 in 912606b