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/1046#issuecomment-255246621,https://api.github.com/repos/pydata/xarray/issues/1046,255246621,MDEyOklzc3VlQ29tbWVudDI1NTI0NjYyMQ==,5572303,2016-10-20T22:32:23Z,2016-10-20T22:32:23Z,CONTRIBUTOR,"Let me exhaust a few other ideas first. I'll definitely share my thoughts here first before making any commit. Thanks. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,182667672 https://github.com/pydata/xarray/issues/1046#issuecomment-253681067,https://api.github.com/repos/pydata/xarray/issues/1046,253681067,MDEyOklzc3VlQ29tbWVudDI1MzY4MTA2Nw==,5572303,2016-10-14T00:53:54Z,2016-10-14T00:53:54Z,CONTRIBUTOR,"My opinion is that the nan has got to go. If we want to (1) maintain pandas-consistency and (2) use bottleneck without mucking it up, then I think we need to add some logic in either rolling.reduce() or rolling._center_result(). So here's my failed attempt: ``` def reverse_and_roll_1d(data, window_size, min_periods=1): """""" Implements a concept to fix the end-of-array problem with xarray.core.rolling._center_shift(), by 1.) take slice of the back-end of the array 2.) flip it 3.) compute centered-window arithmetic 4.) flip it again 5.) replace back-end of default result with (4) :param DataArray data: 1-D data array, with dim name 'x'. :param int window_size: size of window. """""" # first the default way to computing centered window r = data.rolling(x=window_size, center=True, min_periods=min_periods) avg = r.mean() # now we need to fix the back-end of the array rev_start = len(data.x) # an index rev_end = len(data.x) - window_size - 1 \ if len(data.data) > window_size \ else None # another index tail_slice = slice(rev_start, rev_end, -1) # back end of array, flipped r2 = data[dict(x=tail_slice)].\ rolling(x=window_size, center=True, min_periods=min_periods) avg[dict(x=slice(-window_size+1, None))] = \ r2.mean()[dict(x=slice(window_size-2, None, -1))] # replacement return avg ``` This algorithm is consistently 8 times slower than pd.DataFrame.rolling(), for various 1d array sizes. I'm open to ideas as well :) ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,182667672