如何从多个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
相关产品推荐
相关产品推荐

