使用计算修改 xarray 列

modify an xarray column with a calculation

这看起来应该很简单,但也许我对数组的经验不足让我很难做到。我有一个 xarray

我想做的是将波段列乘以

ds[:, 0] = (ds[:, 0] - xmin) / (xmax - xmin)

哪里

xmin is -0.21
xmax is 0.3

上面的行似乎没有按预期工作。它似乎修改了无数据值。我也试过了

 ds2 = ds.where(ds.band > -10000.0)

然后是 运行 行,结果不同但仍然不正确。

xmin 和 xmax 与 XY 数据无关,我读入数组的栅格有 XYZ 数据,我想做的是标准化 Z(高程)列,我认为这是显示的如图像中的“乐队”。 xmin 和 xmax 实际上是我将要比较的几个 rasters/arrays 的最小和最大 Z 值。

所以我不想只修改 Z 的 XY。说完之后,我会将数组重新导出回光栅

所以对于整列用上面的公式调整每个值

我确信这是一项非常容易的任务,但我不知道该怎么做。

你有一个 3d DataArray,但是 band 维度只有 1,所以你基本上有一个 2d 数组。如果不需要/不想要,可以使用 ds.squeeze() 删除维度。

当你说

what i am trying to do is multiply the band column

你的意思是将乘法应用于整个阵列(所以应用于每个像素)?

在这种情况下,您可以这样做:

xmin = -0.21
xmax = 0.3

ds_scaled = (ds - xmin) / (xmax - xmin)

既然你想要scale/normalize数据,你也可以使用从数据中导出的xminxmax


# over full array
xmin = ds.min()
xmax = ds.max()

ds_scaled = (ds - xmin) / (xmax - xmin)

或刚好超过特定维度


# over y dimension
xmin = ds.min(‘y’)
xmax = ds.max(‘y’)

ds_scaled = (ds - xmin) / (xmax - xmin)