html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue
https://github.com/pydata/xarray/issues/3937#issuecomment-1233445643,https://api.github.com/repos/pydata/xarray/issues/3937,1233445643,IC_kwDOAMm_X85JhOML,14314623,2022-08-31T21:36:51Z,2022-08-31T21:36:51Z,CONTRIBUTOR,"I am interested in the coarsen with weights scenario that @dcherian and @mathause described here for a current project of ours.
I solved the issue manually and its not that hard
```python
import xarray as xr
import numpy as np
# example data with weights
data = np.arange(16).reshape(4,4).astype(float)
# add some nans
data[2,2] = np.nan
data[1,1] = np.nan
# create some simple weights
weights = np.repeat(np.array([[1,2,1,3]]).T, 4, axis=1)
weights
da = xr.DataArray(data, dims=['x', 'y'], coords={'w':(['x','y'], weights)})
da
```
```python
masked_weights = da.w.where(~np.isnan(da)) # .weighted() already knows how to do this
da_weighted = da * masked_weights
da_coarse = da_weighted.coarsen(x=2, y=2).sum() / masked_weights.coarsen(x=2, y=2).sum()
da_coarse
```
but I feel all of this is duplicating existing functionality ([e.g. the masking of weights based on nans in the data](https://github.com/pydata/xarray/blob/b5207aa0bf2f3297d7c34d6daf29c9ea9dcefdde/xarray/core/weighted.py#L234)) and might be sensibly streamlined into something like:
```python
da.weighted(da.w).coarsen(...).mean()
```
at least from a user perspective (there might be unique challenges with the implementation that I am overlooking here).
Happy to help but would definitely need some guidance on this one.
I do believe that this would provide a very useful functionality for many folks who work with curvilinear grids and want to prototype things that depend on some sort of scale reduction (coarsening).
Also cc'ing @TomNicholas who is involved in the same project 🤗","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,594669577