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/4197#issuecomment-654015589,https://api.github.com/repos/pydata/xarray/issues/4197,654015589,MDEyOklzc3VlQ29tbWVudDY1NDAxNTU4OQ==,13906519,2020-07-06T05:02:48Z,2020-07-07T13:24:29Z,NONE,"Ok, so for now I roll with this:
```python
def shrink_dataarray(da, dims=None):
""""""remove nodata borders from spatial dims of dataarray""""""
dims = set(dims) if dims else set(da.dims)
if len(dims) != 2:
raise IndexError
# non-spatial dims (carry over, only shrink spatial dims)
nsd = set(da.dims) - dims
nsd_indexers = {d: range(len(da[d])) for d in nsd}
indexers = {d: (da.count(dim=dims - set([d])|nsd).cumsum() != 0) *
(da.count(dim=dims - set([d])|nsd)[::-1].cumsum()[::-1] != 0)
for d in dims}
indexers.update(nsd_indexers)
return da.isel(**indexers)
```
Is it possible to identify non-spatial dims with plain xarray dataarrays (non cf-xarray)? And is there maybe a way to detect unlimited dims (usually the time dim)?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352
https://github.com/pydata/xarray/issues/4197#issuecomment-653753668,https://api.github.com/repos/pydata/xarray/issues/4197,653753668,MDEyOklzc3VlQ29tbWVudDY1Mzc1MzY2OA==,13906519,2020-07-04T11:22:42Z,2020-07-04T11:22:42Z,NONE,"@fujiisoup Thanks, that’s great and much cleaner than my previous numpy code. I’ll run with that and maybe try to pack that in a general function.
Not sure is this a common enough problem to have in xarray itself?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352
https://github.com/pydata/xarray/issues/4197#issuecomment-653752196,https://api.github.com/repos/pydata/xarray/issues/4197,653752196,MDEyOklzc3VlQ29tbWVudDY1Mzc1MjE5Ng==,6815844,2020-07-04T11:05:49Z,2020-07-04T11:05:49Z,MEMBER,"@cwerner
```python
In [40]: idx = (da.count('y').cumsum() != 0) * (da.count('y')[::-1].cumsum()[::-
...: 1] != 0)
In [42]: da.isel(x=idx)
Out[42]:
array([[nan, 0., 2., nan],
[nan, nan, nan, nan],
[nan, 2., 0., nan]])
Dimensions without coordinates: x, y
```
Maybe this works, but I have no cleaner solution.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352
https://github.com/pydata/xarray/issues/4197#issuecomment-653748350,https://api.github.com/repos/pydata/xarray/issues/4197,653748350,MDEyOklzc3VlQ29tbWVudDY1Mzc0ODM1MA==,13906519,2020-07-04T10:20:56Z,2020-07-04T10:37:29Z,NONE,"@keewis @fujiisoup @shoyer thanks. this does indeed not work for my used case if there's a all-nan stretch between parts of the array (think UK and the channel and the northern coast of France) - I simply want to get rid of extra space around a geographic domain (i.e. the nan edges)
```
data = np.array([
[np.nan, np.nan, np.nan, np.nan],
[np.nan, 0, 2, np.nan],
[np.nan, np.nan, np.nan, np.nan],
[np.nan, 2, 0, np.nan],
[np.nan, np.nan, np.nan, np.nan],
])
da = xr.DataArray(data, dims=(""x"", ""y""))
# this also results in a 2x2 array, but should be 3x2
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352
https://github.com/pydata/xarray/issues/4197#issuecomment-653731489,https://api.github.com/repos/pydata/xarray/issues/4197,653731489,MDEyOklzc3VlQ29tbWVudDY1MzczMTQ4OQ==,1217238,2020-07-04T07:04:51Z,2020-07-04T07:04:51Z,MEMBER,"Another way to write this currently would be with `where`: `array.where(array.notnull(), drop=True)`","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352
https://github.com/pydata/xarray/issues/4197#issuecomment-653729887,https://api.github.com/repos/pydata/xarray/issues/4197,653729887,MDEyOklzc3VlQ29tbWVudDY1MzcyOTg4Nw==,6815844,2020-07-04T06:47:04Z,2020-07-04T06:47:04Z,MEMBER,"@keewis
I think it is close to `da.dropna(how='all')`
```python
In [12]: da.dropna('x', how='all').dropna('y', how='all')
Out[12]:
array([[0., 2.],
[2., 0.]])
Dimensions without coordinates: x, y
```
I think supporting multiple dimensions for `dropna` is totally in our scope.
Currently, `dropna` only works with a single dimension and `da.dropna(how='all')` does not work.
@cwerner
Is it close to your example?
If you don't want to drop all nans but only those located at the edges, the above example does not work.
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352
https://github.com/pydata/xarray/issues/4197#issuecomment-653578137,https://api.github.com/repos/pydata/xarray/issues/4197,653578137,MDEyOklzc3VlQ29tbWVudDY1MzU3ODEzNw==,14808389,2020-07-03T14:38:57Z,2020-07-03T14:41:16Z,MEMBER,"you should be able to emulate that using:
```python
In [2]: data = np.array([
...: [np.nan, np.nan, np.nan, np.nan],
...: [np.nan, 0, 2, np.nan],
...: [np.nan, 2, 0, np.nan],
...: [np.nan, np.nan, np.nan, np.nan],
...: ])
...: da = xr.DataArray(data, dims=(""x"", ""y""))
In [3]: def shrink(arr):
...: notnull = da.notnull()
...: indexers = {
...: dim: notnull.any(dim=set(da.dims) - set([dim]))
...: for dim in da.dims
...: }
...: return arr.sel(**indexers)
...:
In [4]: da
Out[4]:
array([[nan, nan, nan, nan],
[nan, 0., 2., nan],
[nan, 2., 0., nan],
[nan, nan, nan, nan]])
Dimensions without coordinates: x, y
In [5]: shrink(da)
Out[5]:
array([[0., 2.],
[2., 0.]])
Dimensions without coordinates: x, y
```
@pydata/xarray: is this common enough to add it to the API?
","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,650549352