Установка или изменение значений нового измерения xarray

#python #python-xarray

#python #python-xarray

Вопрос:

У меня есть массив данных xarray с изображением синей полосы (размером 600 x 600), которое я хотел бы преобразовать в псевдо RGB-изображение (т. Е. Изображение, Которое при просмотре в режиме RGB будет отображаться синим цветом). Я думаю, что если я добавлю две полосы (красную и зеленую) и установлю их значения равными 0, это сработает (я использую rioxarray для сохранения массива в формате PNG).

 dummy_image = np.random.randint(0, 255, size=(600, 600))
im_xa_band = xa.DataArray(dummy_image, dims=['y', 'x'], coords={'x': np.arange(0, 600), 'y': np.arange(0, 600)})
im_xa_3band = im_xa.expand_dims({'band': 3})
im_xa_3band = im_xa_3band.assign_coords(band=['R', 'G', 'B'])
 

Когда я делаю это, две новые полосы получают те же значения, что и исходная синяя полоса. Однако мне не удается найти способ установить для новых диапазонов значение 0 (или, скорее, как вообще установить их значения, кажется такой простой задачей).

.sel() не может использоваться для присвоения значений. Когда я пытаюсь использовать файл .loc, как в Pandas, я получаю сообщение об ошибке:

 im_xa_3band.loc['R', :, :] = 0

ValueError: Assignment destination is a view. Do you want to .copy() array first?
 

Приветствуются любые советы о том, как изменить значения.

Ответ №1:

Кажется, вам нужно позвонить .copy() после .expand_dims() , см. Обсуждение здесь .

 im_xa_3band = im_xa.expand_dims({'band': 3}).copy()
im_xa_3band = im_xa_3band.assign_coords(band=['R', 'G', 'B'])
im_xa_3band.loc['R', :, :] = 0