python - 设置或更改新 xarray 维度的值

标签 python python-xarray

我有一个带有蓝色波段图像(形状 600 x 600)的 xarray DataArray,我想将其转换为伪 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() 不能用于赋值。当我像在 Pandas 中一样尝试 .loc 时,出现错误:

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

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

任何有关如何更改值的建议都将受到赞赏。

最佳答案

看来你需要在.expand_dims()之后调用.copy(),参见讨论here .

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

关于python - 设置或更改新 xarray 维度的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65094478/

相关文章:

python - 在循环中动态定义方法,以模拟数字对象,但所有方法都接收最后一次迭代的值,为什么?

python - 带有掩码数组的 xarray,同时保留整数数据类型

python - 获取一维结果列表并将其转换为 N 维 xarray.DataArray

python - Pillow - 调整 GIF 的大小

python - 如何将 3D 物体表面展平为 2D 阵列?

python - 从 Python 多处理访问 MySQL 连接池

python - 如何自动在 Python 函数中设置 "input"?

python - 如何找到与特定选择的 xarray 等效的索引?

python - xarray - 按特定日期范围对数据进行分组

python - Panda的左合并: resulting table has more rows,防止重复