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/pull/4219#issuecomment-670819822,https://api.github.com/repos/pydata/xarray/issues/4219,670819822,MDEyOklzc3VlQ29tbWVudDY3MDgxOTgyMg==,5635139,2020-08-08T04:02:09Z,2020-08-08T04:02:09Z,MEMBER,"Great! Thanks @fujiisoup ! Ready to go from my POV ","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,655389649 https://github.com/pydata/xarray/pull/4219#issuecomment-670594286,https://api.github.com/repos/pydata/xarray/issues/4219,670594286,MDEyOklzc3VlQ29tbWVudDY3MDU5NDI4Ng==,5635139,2020-08-07T16:13:28Z,2020-08-07T16:13:28Z,MEMBER,"I'm still a bit confused. How does the ""roll over each dimension in turn"" approach equal the ""roll over both dimension together"" approach with a function like std? Here's a proposed counter example: ```python import xarray as xr import numpy as np da = xr.DataArray(np.asarray([[0,10,0],[0,10,0], [0,10,0]]), dims=list('xy')) print(da) array([[ 0, 10, 0], [ 0, 10, 0], [ 0, 10, 0]]) Dimensions without coordinates: x, y x_std = da.rolling(dict(x=2)).std() print(x_std) array([[nan, nan, nan], [ 0., 0., 0.], [ 0., 0., 0.]]) Dimensions without coordinates: x, y x_then_y_std = x_std.rolling(dict(y=2)).std() print(x_then_y_std) array([[nan, nan, nan], [nan, 0., 0.], [nan, 0., 0.]]) Dimensions without coordinates: x, y combined_std = da.rolling(dict(x=2, y=2)).std() print(combined_std) array([[nan, nan, nan], [nan, 5., 5.], [nan, 5., 5.]]) Dimensions without coordinates: x, y ```","{""total_count"": 1, ""+1"": 1, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,655389649 https://github.com/pydata/xarray/pull/4219#issuecomment-657257847,https://api.github.com/repos/pydata/xarray/issues/4219,657257847,MDEyOklzc3VlQ29tbWVudDY1NzI1Nzg0Nw==,5635139,2020-07-12T18:23:19Z,2020-07-12T18:23:28Z,MEMBER,"Re the API, I think the dict is probably the best option, although it does complicate as the arguments become differently typed depending on one vs multiple dimensions. One alternative is to allow fluent args, like: ```python ( da .rolling(x=3, center=True) .rolling(y=5, min_periods=2) .mean() ) ``` ...but does that then seem like the second `rolling` is operating on the _result_ of the first?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,655389649 https://github.com/pydata/xarray/pull/4219#issuecomment-657257600,https://api.github.com/repos/pydata/xarray/issues/4219,657257600,MDEyOklzc3VlQ29tbWVudDY1NzI1NzYwMA==,5635139,2020-07-12T18:20:38Z,2020-07-12T18:20:38Z,MEMBER,"This looks very promising; I'm surprised it was possible without more code. I'm being slow, but where is the nd-rolling algo? I had thought bottleneck didn't support more than one dimension? https://bottleneck.readthedocs.io/en/latest/bottleneck.move.html, and that we'd have to implement our own in numbagg (which would be very possible)","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,655389649