如何在xarray.DataArray中创建数据变量并生成合规NetCDF文件?
解决xarray保存NC文件兼容MATLAB的问题
问题根源
你当前的代码创建的DataArray没有指定变量名,保存时会默认使用__xarray_dataarray_variable__这个非常规名称,MATLAB的ncread对这类名称支持不佳;同时单独保存DataArray的NC文件结构,和MATLAB期望的标准多变量结构存在差异,导致无法正常读取。
两种解决方案
方案1:给DataArray指定变量名后保存
创建DataArray时通过name参数明确变量名,保存到NC文件时就会以该名称作为Data Variable的标识,MATLAB可直接识别。
修改后的代码:
import numpy as np import xarray as xr T_data = np.random.random((100,10)) pressure = np.arange(0,100,1) longitude = np.arange(350,360,1) # 给DataArray指定变量名 T_DataArray = xr.DataArray( data=T_data, coords={'p':pressure, 'lon':longitude}, dims=['p','lon'], name='temperature' # 自定义变量名 ) T_DataArray.to_netcdf(path='C:/my/path/file.nc')
此时MATLAB中可通过ncread('C:/my/path/file.nc', 'temperature')读取数据。
方案2:将DataArray放入Dataset中保存
xarray.Dataset是专门管理多变量的容器,保存后的NC文件结构完全符合NetCDF标准,兼容性更强,也方便后续扩展多变量场景。
修改后的代码:
import numpy as np import xarray as xr T_data = np.random.random((100,10)) pressure = np.arange(0,100,1) longitude = np.arange(350,360,1) T_DataArray = xr.DataArray( data=T_data, coords={'p':pressure, 'lon':longitude}, dims=['p','lon'] ) # 创建Dataset,将DataArray作为命名变量传入 ds = xr.Dataset({'temperature': T_DataArray}) ds.to_netcdf(path='C:/my/path/file.nc')
MATLAB中同样用ncread('C:/my/path/file.nc', 'temperature')读取数据。
额外补充
- 若要给变量添加属性(如单位、描述),可通过
T_DataArray.attrs设置,比如T_DataArray.attrs['units'] = 'K',这些属性会被同步保存到NC文件,MATLAB也能读取到。 - 坐标的属性也可类似设置:
T_DataArray.coords['p'].attrs['units'] = 'hPa'。
内容的提问来源于stack exchange,提问作者cravingforhelp
相关产品推荐
相关产品推荐

