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/3813#issuecomment-655142333,https://api.github.com/repos/pydata/xarray/issues/3813,655142333,MDEyOklzc3VlQ29tbWVudDY1NTE0MjMzMw==,8881170,2020-07-07T21:22:30Z,2020-07-07T21:22:30Z,CONTRIBUTOR,"FYI, this is also seen on `xr.apply_ufunc`, but only when `vectorize=True`. It seems like ndarrays write switch are turned off when `vectorize=True`. This is also solved by `.copy()`, which is good anways to avoid mutating the original ndarrays. Perhaps also a `copy=bool` could be added to `apply_ufunc` to create copies of the ndarrays? I'd be happy to lead that PR if it makes sense. Example: ```python def match_nans(a, b): """"""Pairwise matching of nans between two time series."""""" # Try with and without `.copy` commands. # a = a.copy() # b = b.copy() if np.isnan(a).any() or np.isnan(b).any(): idx = np.logical_or(np.isnan(a), np.isnan(b)) a[idx], b[idx] = np.nan, np.nan return a, b A = xr.DataArray(np.random.rand(10, 5), dims=['time', 'space']) B = xr.DataArray(np.random.rand(10, 5), dims=['time', 'space']) A[0, 1] = np.nan B[5, 0] = np.nan xr.apply_ufunc(match_nans, A, B, input_core_dims=[['time'], ['time']], output_core_dims=[['time'], ['time']], # Try with and without vectorize. vectorize=True,) ```","{""total_count"": 2, ""+1"": 2, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,573031381 https://github.com/pydata/xarray/issues/3813#issuecomment-592847155,https://api.github.com/repos/pydata/xarray/issues/3813,592847155,MDEyOklzc3VlQ29tbWVudDU5Mjg0NzE1NQ==,1828519,2020-02-29T03:38:46Z,2020-02-29T03:38:46Z,CONTRIBUTOR,"@max-sixty That's exactly it. What's really weird for this is that the original code in Satpy is using a dask array and not a numpy array. It seemed very strange to both copy the DataArray (`.copy()`), convert the dask array to a numpy array (`np.asarray`), and then still get a read-only array. I can understand how xarray would treat numpy arrays and dask arrays the same when it comes to this, but coming from outside the project it is very surprising that a dask array would be marked as read-only when it was used to just create a ""new"" numpy array. Feel free to close this or use it as a marker to clarify some documentation or error messages as mentioned in #2891.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,573031381