如何为Xarray.Dataset变量设置唯一自定义坐标并移除旧坐标
让custom_idx成为temperature_c的唯一坐标的方法
原数据集里temperature_c是二维(lat×lon)变量,你添加的custom_idx一般是和lat、lon同维度的二维坐标,要让它成为temperature_c的唯一坐标,需要先把二维数据和坐标都展平为一维,再重新关联维度,具体操作如下:
先将
temperature_c的二维数据展平为一维,同时堆叠原维度:temp_flat = ds["temperature_c"].stack(temp_dim=("lat", "lon"))对应地展平
custom_idx坐标,拿到一维的坐标值:custom_idx_flat = ds["custom_idx"].stack(temp_dim=("lat", "lon")).values重新定义
temperature_c变量,将维度设置为custom_idx,并赋值展平后的数据:ds["temperature_c"] = (["custom_idx"], temp_flat.values)更新数据集的
custom_idx坐标为一维的展平值,同时可以删除不再需要的lat和lon坐标:ds = ds.assign_coords(custom_idx=custom_idx_flat).drop_vars(["lat", "lon"])
完成后,temperature_c的唯一维度就是custom_idx,对应的坐标也是你定义的custom_idx值。
如果你的custom_idx本身就是一维坐标(长度和temperature_c的元素总数一致),操作可以更简化:
# 直接重定义temperature_c的维度为custom_idx,赋值展平后的数据 ds["temperature_c"] = (["custom_idx"], ds["temperature_c"].values.flatten()) # 删除原lat、lon坐标(可选) ds = ds.drop_vars(["lat", "lon"])
内容的提问来源于stack exchange,提问作者HJA24
相关产品推荐
相关产品推荐

