-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
MCVE Code Sample
import xarray as xr
import numpy as np
da = xr.DataArray(
np.arange(56).reshape((7, 8)),
coords={
'x': list('abcdefg'),
'y': 10 * np.arange(8)
},
dims=['x', 'y']
)
# Shouldn't this be (2,)?
assert da.isel(x=[0, 1], y=[0, 1]).shape == (2, 2)
Expected Output
I had expected da.isel(x=[0, 1], y=[0, 1])
to have shape (2,)
. I had generally expected indexing with isel
to behave more like numpy indexing. It's very possible I'm just missing something, or that this is more of a documentation issue more than a behavior issue.
Problem Description
Going off this example in #507:
In [3]: da.isel_points(x=[0, 1, 6], y=[0, 1, 0], dim='points')
Out[3]:
<xray.DataArray (points: 3)>
array([ 0, 9, 48])
Coordinates:
y (points) int64 0 10 0
x (points) |S1 'a' 'b' 'g'
* points (points) int64 0 1 2
and the deprecation of isel_points
with isel
, I had expected to get numpy-like coordinate indexing using isel
.
This was made a little bit more confusing by the documentation for setting values by index. In particular the example:
In [68]: da[ind_x, ind_y] = -2 # assign -2 to (ix, iy) = (0, 0) and (1, 1)
In [69]: da
Out[69]:
<xarray.DataArray (x: 3, y: 4)>
array([[-2, -2, -1, -1],
[-2, -2, 6, 7],
[ 8, 9, 10, 11]])
To me, the comment # assign -2 to (ix, iy) = (0, 0) and (1, 1)
makes it sound like values will be assigned at the coordinates (0, 0) and (1, 1), not (0, 0), (0, 1), (1, 0), and (1, 1).
All in all, I'm not sure if this is a bug, or an issue with documentation. If isel
is not meant to behave like isel_points
, it would be nice to see that in the documentation. If it is possible to get and set points by coordinate (without looping over single coordinates) it would be nice to see an example in the documentation where that's shown.
Output of xr.show_versions()
INSTALLED VERSIONS
commit: None
python: 3.7.6 (default, Jan 4 2020, 12:18:30)
[Clang 11.0.0 (clang-1100.0.33.16)]
python-bits: 64
OS: Darwin
OS-release: 19.3.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8
libhdf5: 1.10.2
libnetcdf: 4.6.3
xarray: 0.15.0
pandas: 1.0.1
numpy: 1.18.1
scipy: 1.4.1
netCDF4: 1.5.2
pydap: None
h5netcdf: 0.7.4
h5py: 2.10.0
Nio: None
zarr: 2.4.0
cftime: 1.0.3.4
nc_time_axis: None
PseudoNetCDF: None
rasterio: None
cfgrib: None
iris: None
bottleneck: None
dask: 2.9.2
distributed: 2.9.3
matplotlib: 3.1.3
cartopy: None
seaborn: 0.10.0
numbagg: None
setuptools: 45.2.0
pip: 20.0.2
conda: None
pytest: 5.3.4
IPython: 7.11.1
sphinx: 2.3.1