Как правильно xarray получить индексы значений True логического массива данных.Я знаю, что в numy way используется np.where
, но это неудобно для многомерных массивов:
>>> da = xr.DataArray([0., 1., 2.])
>>> da > 0
<xarray.DataArray (dim_0: 3)>
array([False, True, True])
Dimensions without coordinates: dim_0
>>> np.where(da > 0)[0]
array([1, 2])
>>> db = xr.DataArray([[0.,1.,2.],[2.,1.,0.]])
>>> db > 0
<xarray.DataArray (dim_0: 2, dim_1: 3)>
array([[False, True, True],
[ True, True, False]])
Dimensions without coordinates: dim_0, dim_1
>>> np.where(db > 0)
Out[61]: (array([0, 0, 1, 1]), array([1, 2, 0, 1]))
Мне было интересно, можно ли сделать это более элегантно, используя функциональность xarray.
причина в том, что я хочу выборочно изменять части массива, но, во-первых, это не работает для многомерной логической индексации:
>>> da[da > 0] *= 2
>>> da
<xarray.DataArray (dim_0: 3)>
array([0., 2., 4.])
Dimensions without coordinates: dim_0
>>> db[db > 0] *= 2
Traceback (most recent call last):
[...]
IndexError: 2-dimensional boolean indexing is not supported.
Во-вторых, в некоторых случаях я повторно использую логическое значениеDataArray много как индексатор, и я хотел бы посмотреть, смогу ли я избежать накладных расходов при поиске связанных значений индекса.(Я не делал никаких профилировок по этому поводу; поэтому эта причина не столь оправдана.)