如何在xarray DataArray中插入气压层级数组解决维度不匹配问题?
问题分析与解决方案
你当前的问题出在np.tile的使用方式错误:tile(pressure_values, (365,11,25))会将8个气压值在经度维度重复25次,导致最终形状为(365,11,200),和原DataArray的(365,11,25)不匹配。
根据你“将pressure_values插入到每个坐标位置”的需求,合理的做法是新增一个气压层级维度,让每个(time, lat, lon)时空点都对应全部8个气压值,具体实现如下:
解决方案代码
import numpy as np import xarray as xr # 生成适配的四维数据:(time, lat, lon, level) pressure_data = np.broadcast_to( # 给pressure_values新增三个前置维度,用于广播匹配 pressure_values[np.newaxis, np.newaxis, np.newaxis, :], (len(temp70_us['time']), len(temp70_us['lat']), len(temp70_us['lon']), len(pressure_values)) ) # 构建带层级维度的DataArray pressure_filled = xr.DataArray( data=pressure_data, dims=['time', 'lat', 'lon', 'level'], coords={ 'time': temp70_us['time'], 'lat': temp70_us['lat'], 'lon': temp70_us['lon'], 'level': pressure_values # 直接用气压值作为层级坐标 } )
替代方案(若需保留三维结构)
如果你确实需要维持原三维形状(不新增维度),则需要明确每个时空点对应哪个气压值(比如循环赋值或按规则映射),但这种场景不符合“插入所有气压值到每个坐标”的需求,示例代码(仅作参考):
# 示例:将每个时空点赋值为pressure_values的第一个元素 pressure_filled = pressure_empty.copy(data=np.full_like(pressure_empty.data, pressure_values[0])) # 或按某种规则映射(如按纬度匹配气压层级) # 需根据具体逻辑自行实现
内容的提问来源于stack exchange,提问作者William Baker
相关产品推荐
相关产品推荐

