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

如何从多个numpy数组创建带时间经纬度坐标的xarray时间序列DataArray

解决方案

核心思路

单年的二维numpy数组可以通过新增长度为1的时间维度匹配三维DataArray的形状要求,多个年度数组可先沿时间维度拼接后再创建DataArray。

具体实现代码

首先导入依赖库:

import numpy as np
import pandas as pd
import xarray as xr

你已有的坐标生成逻辑是正确的,无需修改:

xll = -20.0
xur = 55.0
yll = -35.0
yur = 40.0
cellsize = 0.1

lon_tup = np.arange(xll, xur, cellsize) + (cellsize / 2)
lat_tup = np.arange(yll, yur, cellsize)
lat_tup = lat_tup[::-1] + (cellsize / 2)
time_coords = pd.date_range("2000-01-01", freq="Y", periods=21)

批量合并多个年度数组的完整实现

# 存储所有带时间维度的年度数组
temp_list = []
for year in range(2000, 2021):
    # 替换为你实际读取对应年份numpy数组的逻辑
    annual_temp = np.random.rand(1500, 1500)
    # 为单年数组新增时间维度,形状从(1500,1500)变为(1,1500,1500)
    annual_temp_with_time = annual_temp[np.newaxis, :, :]
    temp_list.append(annual_temp_with_time)

# 沿时间维度拼接所有数组,最终形状为(21, 1500, 1500)
concated_temp = np.concatenate(temp_list, axis=0)

# 一次性创建符合要求的DataArray
ds = xr.DataArray(
    concated_temp,
    coords={
        "time": time_coords,
        "lat": lat_tup,
        "lon": lon_tup
    },
    dims=["time", "lat", "lon"],
    name="temperature"
)

单年赋值的修正写法

如果仅需要给已创建的空DataArray单个时间步赋值,直接按索引赋值即可,xarray会自动匹配维度:

temp2000 = np.random.rand(1500, 1500)
# 给2000年对应的第一个时间步赋值
ds[0] = temp2000

注意事项

如果你的原始numpy数组的维度顺序为(lon, lat),将dims参数调整为["time", "lon", "lat"]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:45:04