首页 > 解决方案 > 使用计算修改 xarray 列

问题描述

这看起来应该很简单,但也许我对数组的缺乏经验让我很难。我有一个 xarray 在此处输入图像描述

我想要做的是将带列乘以沿线的东西

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

在哪里

xmin is -0.21
xmax is 0.3

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

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

然后跑了这条线,结果不同但仍然不正确。

xmin 和 xmax 与 XY 数据无关,我正在读入数组的栅格具有 XYZ 数据,我想做的是标准化 Z(elevation) 列,我认为它在图片。xmin 和 xmax 实际上是我将要比较的几个栅格/数组的最小和最大 Z 值。

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

因此,对于整个列,使用上述公式调整每个值

我确信这是一项非常简单的任务,但我不知道如何做到这一点。

标签: pythonnumpypython-xarray

解决方案


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

当你说

我想要做的是乘以乐队列

你的意思是把乘法应用到整个数组(所以到每个像素)?

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

xmin = -0.21
xmax = 0.3

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

由于看起来您想要缩放/规范化数据,您还可以使用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)

推荐阅读