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/2605#issuecomment-562654929,https://api.github.com/repos/pydata/xarray/issues/2605,562654929,MDEyOklzc3VlQ29tbWVudDU2MjY1NDkyOQ==,32069530,2019-12-06T17:02:05Z,2019-12-06T17:02:05Z,NONE,"Ho, sorry... I just see the PR... ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,390774883
https://github.com/pydata/xarray/issues/2605#issuecomment-562652648,https://api.github.com/repos/pydata/xarray/issues/2605,562652648,MDEyOklzc3VlQ29tbWVudDU2MjY1MjY0OA==,32069530,2019-12-06T16:56:20Z,2019-12-06T16:56:20Z,NONE,"Hi,
I was looking to some xarray padding function and get this issue.
For the moment, I made a function of my own based on numpy.pad and xr.apply_ufunc
When possible, it also pad associated coordinates. If it can be of any help here...
Here it is:
```
def xpad(ds, dims={}):
""""""
Padding of xarray. Coordinate are linearly padded if original coordinates are evenly spaced. Otherwise, no new coordinates are affected to padded axis.
Padded dimension is named with prefix 'padded_'
Args:
ds (xarray): xarray
dims (dict): keys are dimensions along which to pad and values are padding tuple (see np.pad). (ex {'pulse:(10,0)})
Returns:
(xarray) : same as input with padded axis.
""""""
mypad = [(0,0) for n in ds.dims if n not in dims.keys()]
mypad+=list(dims.values())
padded_ds = xr.apply_ufunc(np.pad, ds, mypad,input_core_dims=[list(dims.keys()),[]], output_core_dims=[['padded_'+d for d in dims.keys()]], keep_attrs=True)
for var, ext in dims.items():
dvar = np.diff(ds[var])
if np.allclose(dvar, dvar[0]):
dvar = dvar[0]
left_bound, right_bound = (np.min(ds[var]).data, np.max(ds[var]).data) if dvar>0. else (np.max(ds[var]).data, np.min(ds[var]).data)
extended_var = np.append(ds[var].data, np.max(ds[var]).data+np.arange(1,ext[1]+1)*dvar)
extended_var = np.append(np.min(ds[var]).data+np.arange(-ext[0],0)*dvar, extended_var)
padded_ds = padded_ds.assign_coords(**{'padded_'+var:extended_var})
else:
print('Coordinates {} are not evenly spaced, padding is impossible'.format(var))
return padded_ds
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,390774883