#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