Closed
Description
Problem description
This is a problem if I want to swap_dims in DataArray Accessor.
Code Sample
This is what I'm forced to do:
import xarray as xr
import numpy as np
@xr.register_dataarray_accessor('testing')
class TestAccessor(object):
def __init__(self, xarray_obj):
self._obj = xarray_obj
def the_problem(self):
self._obj = self._obj.swap_dims({'x':'x2'})
print(self._obj)
arr = np.random.rand(4,3,2)
cube = xr.DataArray(arr, dims=['ya', 'x', 'y'], coords={'y':[1,3], 'ya':[1,2,3,6], 'x':[1,2,5]})
cube.coords['x2'] = ('x', [1,2,3])
cube.testing.the_problem()
print(cube)
this prints:
<xarray.DataArray (ya: 4, x2: 3, y: 2)>
array([[[ 0.659583, 0.167555],
[ 0.357974, 0.46081 ],
[ 0.85115 , 0.845257]],
[[ 0.280308, 0.777399],
[ 0.512527, 0.542036],
[ 0.838603, 0.799414]],
[[ 0.572031, 0.350464],
[ 0.205219, 0.812232],
[ 0.687778, 0.984928]],
[[ 0.803385, 0.63981 ],
[ 0.089909, 0.499857],
[ 0.25266 , 0.967909]]])
Coordinates:
* y (y) int32 1 3
* ya (ya) int32 1 2 3 6
x (x2) int32 1 2 5
* x2 (x2) int32 1 2 3
<xarray.DataArray (ya: 4, x: 3, y: 2)>
array([[[ 0.659583, 0.167555],
[ 0.357974, 0.46081 ],
[ 0.85115 , 0.845257]],
[[ 0.280308, 0.777399],
[ 0.512527, 0.542036],
[ 0.838603, 0.799414]],
[[ 0.572031, 0.350464],
[ 0.205219, 0.812232],
[ 0.687778, 0.984928]],
[[ 0.803385, 0.63981 ],
[ 0.089909, 0.499857],
[ 0.25266 , 0.967909]]])
Coordinates:
* y (y) int32 1 3
* ya (ya) int32 1 2 3 6
* x (x) int32 1 2 5
x2 (x) int32 1 2 3
where the two xarrays are clearly different.
I would want to do:
import xarray as xr
import numpy as np
@xr.register_dataarray_accessor('testing')
class TestAccessor(object):
def __init__(self, xarray_obj):
self._obj = xarray_obj
def the_problem(self):
self._obj.swap_dims({'x':'x2'}, inplace = True)
print(self._obj)
arr = np.random.rand(4,3,2)
cube = xr.DataArray(arr, dims=['ya', 'x', 'y'], coords={'y':[1,3], 'ya':[1,2,3,6], 'x':[1,2,5]})
cube.coords['x2'] = ('x', [1,2,3])
cube.testing.the_problem()
print(cube)
this would keep the two xarrays the same, as they should be:
<xarray.DataArray (ya: 4, x2: 3, y: 2)>
array([[[ 0.659583, 0.167555],
[ 0.357974, 0.46081 ],
[ 0.85115 , 0.845257]],
[[ 0.280308, 0.777399],
[ 0.512527, 0.542036],
[ 0.838603, 0.799414]],
[[ 0.572031, 0.350464],
[ 0.205219, 0.812232],
[ 0.687778, 0.984928]],
[[ 0.803385, 0.63981 ],
[ 0.089909, 0.499857],
[ 0.25266 , 0.967909]]])
Coordinates:
* y (y) int32 1 3
* ya (ya) int32 1 2 3 6
x (x2) int32 1 2 5
* x2 (x2) int32 1 2 3
<xarray.DataArray (ya: 4, x: 3, y: 2)>
array([[[ 0.659583, 0.167555],
[ 0.357974, 0.46081 ],
[ 0.85115 , 0.845257]],
[[ 0.280308, 0.777399],
[ 0.512527, 0.542036],
[ 0.838603, 0.799414]],
[[ 0.572031, 0.350464],
[ 0.205219, 0.812232],
[ 0.687778, 0.984928]],
[[ 0.803385, 0.63981 ],
[ 0.089909, 0.499857],
[ 0.25266 , 0.967909]]])
Coordinates:
* y (y) int32 1 3
* ya (ya) int32 1 2 3 6
x (x2) int32 1 2 5
* x2 (x2) int32 1 2 3
I have version 0.10.0, the newest on conda-forge.
Metadata
Metadata
Assignees
Labels
No labels