Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 8 additions & 5 deletions uxarray/core/dataarray.py
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -412,14 +412,17 @@ def nodal_average(self):

# weighted_mean()
# .weighted.mean()
# weights are only on grid - not supporting custom weights for now
def mean(self, dim=None, *, skipna=None, keep_attrs=None, weighted=False, **kwargs):
if weighted:
if self._face_centered():
grid_dim = "n_face"
# use face areas as weight
weights = self.uxgrid.face_areas
weights = da.from_array(self.uxgrid.face_areas.values)
elif self._edge_centered():
grid_dim = "n_edge"
# use edge magnitude as weight
weights = self.uxgrid.edge_node_distances
weights = da.from_array(self.uxgrid.edge_node_distances.values)
else:
# apply regular Xarray mean
warnings.warn(
Expand All @@ -428,13 +431,13 @@ def mean(self, dim=None, *, skipna=None, keep_attrs=None, weighted=False, **kwar
"variables. Performing an unweighted mean."
)

return super().mean(dim=None, skipna=None, keep_attrs=None, **kwargs)
return super().mean(dim=dim, skipna=skipna, keep_attrs=keep_attrs, **kwargs)

# compute the total weight
total_weight = weights.sum()

# compute weighted mean
weighted_mean = (self * weights).sum() / total_weight
# compute weighted mean #assumption on index of dimension (last one is geometry)
weighted_mean = (self * weights).sum(dim=grid_dim) / total_weight

# create a UxDataArray and return it
return UxDataArray(weighted_mean, uxgrid=self.uxgrid)
Expand Down