基于9km分辨率NetCDF生成2km新变量NetCDF文件方法咨询
Matlab将插值结果写入NEW.nc的实现方法
你可以直接在现有脚本的末尾添加以下代码即可完成写入,操作逻辑为:先定义NetCDF维度和变量结构,再写入对应数值。
完整追加代码
%% 写入插值结果到新NetCDF文件 out_filename = 'NEW.nc'; % 1. 定义维度参数 nlon = length(lon); % 对应1501 nlat = length(lat); % 对应1953 ndepth = length(Depth);% 对应20 % 2. 创建坐标维度 nccreate(out_filename, 'lon', 'Dimensions', {'lon', nlon}, 'Datatype', 'double'); nccreate(out_filename, 'lat', 'Dimensions', {'lat', nlat}, 'Datatype', 'double'); nccreate(out_filename, 'Depth', 'Dimensions', {'Depth', ndepth}, 'Datatype', 'double'); % 3. 创建插值后变量,维度顺序和你输出的数组维度匹配:lon×lat×Depth nccreate(out_filename, 'zuc', 'Dimensions', {'lon', nlon, 'lat', nlat, 'Depth', ndepth}, 'Datatype', 'single'); nccreate(out_filename, 'zvc', 'Dimensions', {'lon', nlon, 'lat', nlat, 'Depth', ndepth}, 'Datatype', 'single'); nccreate(out_filename, 'zwc', 'Dimensions', {'lon', nlon, 'lat', nlat, 'Depth', ndepth}, 'Datatype', 'single'); % (可选)如果需要保留原文件的Time变量可取消注释下行 % nccreate(out_filename, 'Time', 'Dimensions', {'Time', length(Time)}, 'Datatype', 'double'); % 4. 写入所有变量数值 ncwrite(out_filename, 'lon', lon); ncwrite(out_filename, 'lat', lat); ncwrite(out_filename, 'Depth', Depth); ncwrite(out_filename, 'zuc', zuc); ncwrite(out_filename, 'zvc', zvc); ncwrite(out_filename, 'zwc', zwc); % ncwrite(out_filename, 'Time', Time); % 可选写入原Time变量 % (可选)给变量添加属性,也可以从原文件读取属性批量写入 ncwriteatt(out_filename, 'lon', 'units', 'degrees_east'); ncwriteatt(out_filename, 'lat', 'units', 'degrees_north'); ncwriteatt(out_filename, 'Depth', 'units', 'm'); ncwriteatt(out_filename, 'zuc', 'long_name', 'eastward velocity component'); ncwriteatt(out_filename, 'zvc', 'long_name', 'northward velocity component'); ncwriteatt(out_filename, 'zwc', 'long_name', 'vertical velocity component');
注意事项
- 变量的数据类型可根据需求调整,若原文件
zu/zv/zw为double类型,将上述代码中的Datatype参数改为double即可,避免精度损失 - 如果需要完全继承原文件的变量属性、全局属性,可先用
ncinfo('mydata.nc')读取原文件元信息,对应写入新文件即可 - 运行完代码后可调用
ncdisp('NEW.nc')检查输出文件的维度、变量是否符合预期
内容的提问来源于stack exchange,提问作者Felipe
相关产品推荐
相关产品推荐

