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/7021#issuecomment-1452521051,https://api.github.com/repos/pydata/xarray/issues/7021,1452521051,IC_kwDOAMm_X85Wk7Zb,39671216,2023-03-02T20:47:11Z,2023-03-02T20:47:11Z,CONTRIBUTOR,"Been half a year and I found myself stuck at this inconsistent behavior again. Another problem I found but haven't mentioned yet is that `DatasetRolling.construct` will swap the rolling dimension name with `window_dim` when `DataArrayRolling.construct` doesn't. This time, I've actually identified a cause for this problem below: https://github.com/pydata/xarray/blob/b018442c8dfa3e71ec35e294de69e2011949afec/xarray/core/rolling.py#L789-L791 ```python .isel({d: slice(None, None, s) for d, s in zip(self.dim, strides)}) ``` I currently still can't figure it out what is the original intention that `.isel` trying to achieve since it causes so much problem without any benefit. It should be noted that this can explode the memory if `xr.Dataset` is reasonably large (It just explode 3 channels PPG, 135Hz, 6Hrs of recording, a mere 300MB to 20-40GB++, so I think this is critical). ## Solution Removing `.isel` part fixed everything. ### Test case ```python test_arr = xr.DataArray(np.arange(8).reshape(2, 4), dims=('a', 'b')) # Borrowed from `DataArray.__doc__`'s example. test_dset= xr.Dataset(data_vars={i: tr for i in range(3)}) ``` DataArray ```python tr.rolling(b=2).construct('window_dim', stride=2) >>> array([[[nan, 0.], [ 1., 2.]], [[nan, 4.], [ 5., 6.]]]) Dimensions without coordinates: a, b, window_dim ``` Dataset ```python trd.rolling(b=2).construct('window_dim', stride=2) >>> Dimensions: (a: 2, b: 2, window_dim: 2) Dimensions without coordinates: a, b, window_dim Data variables: 0 (a, b, window_dim) float64 nan 0.0 1.0 2.0 nan 4.0 5.0 6.0 1 (a, b, window_dim) float64 nan 0.0 1.0 2.0 nan 4.0 5.0 6.0 2 (a, b, window_dim) float64 nan 0.0 1.0 2.0 nan 4.0 5.0 6.0 trd.rolling(b=2).construct('window_dim', stride=2)[0] >>> array([[[nan, 0.], [ 1., 2.]], [[nan, 4.], [ 5., 6.]]]) Dimensions without coordinates: a, b, window_dim ``` ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1370063272 https://github.com/pydata/xarray/issues/7021#issuecomment-1244634332,https://api.github.com/repos/pydata/xarray/issues/7021,1244634332,IC_kwDOAMm_X85KL5zc,39671216,2022-09-12T22:39:35Z,2022-09-12T22:42:11Z,CONTRIBUTOR,"> Thanks for the report & I agree that this should lead to the same but the code paths are indeed different - but I have not looked in to the actual root cause. Could be that this is also not super thoroughly tested (and used!): > > https://github.com/pydata/xarray/blob/b018442c8dfa3e71ec35e294de69e2011949afec/xarray/core/rolling.py#L289 > > https://github.com/pydata/xarray/blob/b018442c8dfa3e71ec35e294de69e2011949afec/xarray/core/rolling.py#L721 > > B.t.w. a copy-pastable example would be appreciated. Thanks for the response, here is a straightforward example. ```python import xarray as xr dummy = list(range(100)) x, y, z = [xr.DataArray(dummy, dims=['t']) for _ in range(3)] ds = xr.Dataset( {'x': x, 'y': y, 'z': z} ) print(x.rolling(t=4).construct('w', stride=4).shape) print(ds.rolling(t=4).construct('w', stride=4).x.shape) ``` **Results:** ``` > (25, 4) > (7, 4) ``` I had a hunch that the problem come from this part - not quite sure what self._mapping_to_list did here, haven't look it up yet. https://github.com/pydata/xarray/blob/b018442c8dfa3e71ec35e294de69e2011949afec/xarray/core/rolling.py#L764-L772 Since I only had one dimension to deal with, removing this loop solves the problem for me.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1370063272 https://github.com/pydata/xarray/issues/7021#issuecomment-1244602741,https://api.github.com/repos/pydata/xarray/issues/7021,1244602741,IC_kwDOAMm_X85KLyF1,10194086,2022-09-12T22:23:27Z,2022-09-12T22:23:27Z,MEMBER,"Thanks for the report & I agree that this should lead to the same but the code paths are indeed different - but I have not looked in to the actual root cause. Could be that this is also not super thoroughly tested (and used!): https://github.com/pydata/xarray/blob/b018442c8dfa3e71ec35e294de69e2011949afec/xarray/core/rolling.py#L289 https://github.com/pydata/xarray/blob/b018442c8dfa3e71ec35e294de69e2011949afec/xarray/core/rolling.py#L721 B.t.w. a copy-pastable example would be appreciated.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,1370063272