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/4015#issuecomment-622599058,https://api.github.com/repos/pydata/xarray/issues/4015,622599058,MDEyOklzc3VlQ29tbWVudDYyMjU5OTA1OA==,2448579,2020-05-01T22:47:36Z,2020-05-01T22:47:36Z,MEMBER,"@mathuse is right.
The solution is to use `dtype` when we create `meta` for vectorized functions here:
https://github.com/pydata/xarray/blob/3820fb77256682d909c1e41d962e29bec0edd62d/xarray/core/computation.py#L1008-L1011
@ulijh or @mathause , are either of you up for sending in a PR?
For now the workaround is to pass your own `meta = np.ndarray((0,0), dtype=da.dtype)`","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,608974755
https://github.com/pydata/xarray/issues/4015#issuecomment-622374824,https://api.github.com/repos/pydata/xarray/issues/4015,622374824,MDEyOklzc3VlQ29tbWVudDYyMjM3NDgyNA==,10194086,2020-05-01T12:49:42Z,2020-05-01T12:49:42Z,MEMBER,"It works when you set `vectorize=False`
```python
da2 = xr.apply_ufunc(
func,
da,
vectorize=False,
dask=""parallelized"",
output_dtypes=[da.dtype],
)
assert da2.dtype == da.dtype, ""wrong dtype""
```
or when you pass your own `meta`:
```python
da2 = xr.apply_ufunc(
func,
da,
vectorize=True,
dask=""parallelized"",
output_dtypes=[da.dtype],
meta=da
)
assert da2.dtype == da.dtype, ""wrong dtype""
```
This also goes wrong if the DataArray has another dtype, e.g. `int`:
```python
da = xr.DataArray(np.arange(2*3*4).reshape(2,3,4)
da = da.chunk(dict(dim_1=1))
da2 = xr.apply_ufunc(
func,
da,
vectorize=True,
dask=""parallelized"",
output_dtypes=[da.dtype],
)
assert da2.dtype == da.dtype, ""wrong dtype""
```
Indeed, the dtype of meta takes precedence over the dtype (https://github.com/dask/dask/blob/25005e19cc30e8b2877d4dadbaef378ee912bdc0/dask/array/core.py#L1022):
> meta : empty ndarray
> empty ndarray created with same NumPy backend, ndim and dtype as the
> Dask Array being created (overrides dtype)
>
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,608974755