如何基于Xarray获取三维云数据中符合阈值的最高层对应值?
用Xarray无循环提取云顶高度对应数据值
最优一步法
无需单独计算索引,直接结合where和max即可得到目标结果。先用where过滤掉低于阈值(0.6)的数值,再沿海拔维度(c)取最大值——max会自动忽略nan,且对应最高海拔层(假设c索引越大海拔越高)的有效数据:
# 直接生成目标2D数据数组 top_cloud = cloud.where(cloud > 0.6).max(dim='c')
运行结果完全符合期望:
>>> top_cloud <xarray.DataArray (a: 2, b: 2)> array([[0.6108219 , 0.84218767], [ nan, 0.82793776]]) Dimensions without coordinates: a, b
基于已有索引的方法
如果已经得到符合条件的最高层索引index,可通过以下步骤提取对应值:
- 将索引转为整数类型(用-1占位nan的位置)
- 用
isel按索引提取数据,再用where将无效位置(原索引为nan)恢复为nan
# 处理索引类型并保留无效标记 index_int = index.where(index.notnull(), -1).astype(int) # 提取对应数据并恢复nan top_cloud = cloud.isel(c=index_int).where(index.notnull())
该方法适配已提前计算好索引的场景,同样能得到目标结果。
内容的提问来源于stack exchange,提问作者Guimeteo
相关产品推荐
相关产品推荐

