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/3883#issuecomment-630387515,https://api.github.com/repos/pydata/xarray/issues/3883,630387515,MDEyOklzc3VlQ29tbWVudDYzMDM4NzUxNQ==,10194086,2020-05-18T19:21:55Z,2020-10-27T14:27:50Z,MEMBER,"```python %load_ext line_profiler import numpy as np import xarray as xr from xarray.core.weighted import Weighted as w shape_weights = (1000, 1000) shape_data = (1000, 1000, 10) add_nans = False def lprun_weighted(shape_weights, shape_data, add_nans, skipna=None): weights = xr.DataArray(np.random.randn(*shape_weights)) data = np.random.randn(*shape_data) # add approximately 25 % NaNs if add_nans: c = int(data.size * 0.25) data.ravel()[np.random.choice(data.size, c, replace=False)] = np.NaN data = xr.DataArray(data) return data.weighted(weights).mean(skipna=skipna) %lprun -f w._reduce -f w._weighted_mean -f w._sum_of_weights -f w._weighted_sum -f w.__init__ -f lprun_weighted -u 1e-03 lprun_weighted(shape_weights, shape_data, add_nans, skipna=None) ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,587048587 https://github.com/pydata/xarray/issues/3883#issuecomment-633918109,https://api.github.com/repos/pydata/xarray/issues/3883,633918109,MDEyOklzc3VlQ29tbWVudDYzMzkxODEwOQ==,10194086,2020-05-26T09:33:40Z,2020-05-26T09:34:25Z,MEMBER,"`weighted(weights).mean(skipna=True)` calls https://github.com/pydata/xarray/blob/d1f7cb8fd95d588d3f7a7e90916c25747b90ad5a/xarray/core/weighted.py#L143 and https://github.com/pydata/xarray/blob/d1f7cb8fd95d588d3f7a7e90916c25747b90ad5a/xarray/core/weighted.py#L130 `da.fillna(0.0)` in turn calls `where(null(data), other)`. Thus `null`/ `notnull` is called twice. This could be optimized by doing `self.null = obj.null()` in `__init__(...)`. This might also allow `self.any_null = self.null.any()` to skip `NaN` handling if there are none. However, this needs more thinking if a `Dataset` is passed. Probably overkill but leaving this here for reference. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,587048587 https://github.com/pydata/xarray/issues/3883#issuecomment-603717924,https://api.github.com/repos/pydata/xarray/issues/3883,603717924,MDEyOklzc3VlQ29tbWVudDYwMzcxNzkyNA==,10194086,2020-03-25T08:49:45Z,2020-03-25T08:49:45Z,MEMBER,maybe relevant: #1995,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,587048587