python - 使用计算修改 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。之后,我会将数组重新导出回栅格
因此,对于整个列,使用上述公式调整每个值
我确信这是一项非常简单的任务,但我不知道如何做到这一点。
解决方案
你有一个 3d DataArray
,但band
维度只有 1,所以你基本上有一个 2d 数组。ds.squeeze()
如果您不需要/不想要它,您可以使用它来删除维度。
当你说
我想要做的是乘以乐队列
你的意思是把乘法应用到整个数组(所以到每个像素)?
在这种情况下,您可以这样做:
xmin = -0.21
xmax = 0.3
ds_scaled = (ds - xmin) / (xmax - xmin)
由于看起来您想要缩放/规范化数据,您还可以使用xmin
并xmax
从数据派生:
# 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)
推荐阅读
- c - 为什么在这个 switch 语句中匹配默认大小写?
- php - Laravel:授予经理和实习生角色授权
- macos - “字符查看器”数据存储在哪里?
- python - 抓取时查找特定值,找不到值时忽略
- regex - 如何在 expressjs 中使用正则表达式和路由参数?
- google-apps-script - 在插件/应用程序脚本中拦截或获取 Google Drive 文件保存和打开的回调
- c# - 如何使用未传递给真实对象的模拟
- automated-tests - 如何使用 rebar3 使用适当的代码设置测试?
- android - Facebook 应用程序上未安装适用于 Android 上的 React Native 的 Facebook SDK
- listview - 如何在flutter中删除自定义小部件之间的空格并在listview.builder中适合小部件