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/4541#issuecomment-719907040,https://api.github.com/repos/pydata/xarray/issues/4541,719907040,MDEyOklzc3VlQ29tbWVudDcxOTkwNzA0MA==,10194086,2020-10-31T09:10:10Z,2020-10-31T09:10:10Z,MEMBER,Yes that would be great.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,729980097
https://github.com/pydata/xarray/issues/4541#issuecomment-717320425,https://api.github.com/repos/pydata/xarray/issues/4541,717320425,MDEyOklzc3VlQ29tbWVudDcxNzMyMDQyNQ==,10194086,2020-10-27T15:23:55Z,2020-10-27T15:23:55Z,MEMBER,"The discussion goes back to here: https://github.com/pydata/xarray/pull/2922#issuecomment-545200082 (by @dcherian)
>> I decided to replace all NaN in the weights with 0.
> Can we raise an error instead? It should be easy for the user to do `weights.fillna(0)` instead of relying on xarray's magical behaviour.
Thinking a bit more about this I now favour the `isnull().any()` test and would add a `check_weights` kwargs. I would even be fine to set `check_weights=False` per default and say the user is responsible to supply valid weights (but I'd want others to weigh in here).
In addition, `a.isnull().any()` is quite a bit faster than `a.fillna(0)` (even if there are no nans present). This is mostly true for numpy arrays, not so much for dask (by my limited tests). On the other hand the `isnull().any()` test is a small percentage of the total time (https://github.com/pydata/xarray/issues/3883#issuecomment-630387515).
---
I am also not entirely sure I understand where your issue lies. You eventually _have_ to compute, right? Do you do something between `w = data.weighted(weights)` and `w.mean()`?
Ah maybe I understand, your data looks like:
* `data`: ``
* `weights`: ``
And now `weights` gets checked for all 100 models where only one would be relevant. Is this correct? (So as another workaround would be using `xr.align` before sending `weights` to `weighted`.)
---
My limited speed tests:
```python
import numpy as np
import xarray as xr
a = xr.DataArray(np.random.randn(1000, 1000, 10, 10))
%timeit a.isnull().any()
%timeit a.fillna(0)
b = xr.DataArray(np.random.randn(1000, 1000, 10, 10)).chunk(100)
%timeit b.isnull().any()
%timeit b.fillna(0)
```
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,729980097
https://github.com/pydata/xarray/issues/4541#issuecomment-717240738,https://api.github.com/repos/pydata/xarray/issues/4541,717240738,MDEyOklzc3VlQ29tbWVudDcxNzI0MDczOA==,10194086,2020-10-27T13:24:43Z,2020-10-27T13:24:43Z,MEMBER,"The other possibility would be to do sth like:
```python
def __init__(..., skipna=False):
if skipna:
weights = weighs.fillna(0)
```
we did decide to not do this somewhere in the discussion, not entirely sure anymore why.
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,729980097
https://github.com/pydata/xarray/issues/4541#issuecomment-717107362,https://api.github.com/repos/pydata/xarray/issues/4541,717107362,MDEyOklzc3VlQ29tbWVudDcxNzEwNzM2Mg==,10194086,2020-10-27T09:27:25Z,2020-10-27T09:27:25Z,MEMBER,"`weights` cannot contain `NaN`s else the result will just be `NaN`, even with `skipna=True`. But then the weights rarely contain `NaN`. So this test is a bit a trade-off between time and convenience. A kwarg can certainly make sense (was also requested before). I would probably _not_ call the kwarg `skipna`. Maybe `check_weights`? or `check_nan`? (better names welcome)
I think `da.isnull().any()` is lazy and it's the `if` that makes it eager. So an alternative would be to make the statement lazy but I don't know how this would be done.
The relevant test is here:
https://github.com/pydata/xarray/blob/adc55ac4d2883e0c6647f3983c3322ca2c690514/xarray/tests/test_weighted.py#L22
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,729980097