You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的xarray对LAI栅格数据进行重分类?

解决xarray.DataArray栅格重分类问题

首先明确你的需求:将0-0.4映射为1,0.4-1.0映射为2,1.0-1.4映射为3,1.4-1.8映射为4。你的两种方法存在问题,以下是问题分析和正确实现方式:

你的方法问题分析

  • 方法一:使用np.where索引赋值的逻辑顺序是对的(从高阈值到低阈值,避免覆盖),但这种方式不符合xarray的原生操作习惯,且若数据是延迟加载(如dask数组)会触发不必要的计算,甚至可能因索引广播问题导致赋值失效。
  • 方法二:完全错误使用了xr.where,xr.where的正确语法是xr.where(条件, 满足条件的取值, 不满足条件的取值),且你没有将计算结果赋值给变量,原数据根本未被修改。

正确实现方式

方式一:嵌套使用xr.where(推荐)

利用xr.where的嵌套特性,从高到低判断阈值,生成新的分类后DataArray:

LAI_reclassified = xr.where(LAI > 1.4, 4,
                            xr.where(LAI > 1.0, 3,
                                     xr.where(LAI > 0.4, 2, 1)))

这种方式会保留原数据的维度、坐标和属性,且支持延迟加载的数组。

方式二:结合pandas.cut实现

如果习惯用区间划分的方式,可以借助pandas的cut函数:

import pandas as pd

# 定义区间边界和对应标签
bins = [0, 0.4, 1.0, 1.4, 1.8]
labels = [1, 2, 3, 4]

# 展平数据处理后重塑形状,再转回xarray.DataArray
LAI_reclassified = xr.DataArray(
    pd.cut(LAI.data.flatten(), bins=bins, labels=labels, include_lowest=True).reshape(LAI.shape),
    dims=LAI.dims,
    coords=LAI.coords,
    attrs=LAI.attrs
)

include_lowest=True确保0值被包含在第一个区间内。

内容的提问来源于stack exchange,提问作者Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:52:31