Matlab 批量修改nc文件中某一个变量的数值

场景:发现nc文件中某个变量的数值存在问题,修改在源文件基础上修改。
注意事项:
  • 注意nc文件中,变量和属性的区别。可以单独修改变量,也可单独修改某一个变量的属性;
  • 修改之后的变量的形状(维度)不能变,否则需要修改维度信息;
  • 修改之后的变量的属性仍是原来的信息,若也要修改,则需针对属性进行修改;
(1)修改nc文件中的 “time” 变量为例
% read original nc file
DirPath    = '\Wind';
inFileList = dir([DirPath, '\*.nc']);   % 读取整个文件夹下的列表,存入结构体

for i = 1:468
    FileName = [DirPath, '\', inFileList(i).name];  % 路径+文件名,读取具体文件
    StrYear  = inFileList(i).name(end-9:end-6);     % 读取日期,如“2010”,类型为字符串
    StrMonth = inFileList(i).name(end-4:end-3);     % 读取日期,如“08”,类型为字符串
    iM       = int32(str2num(StrMonth));            % 转换为数字类型
    ncid     = netcdf.open(FileName, 'WRITE');      % 以“read-wirte”方式打开nc
    timeid   = netcdf.inqVarID(ncid, 'time');       % 读变量id
    time_org = netcdf.getVar(ncid, timeid);         % 获取变量    

    MonthDays = [31 28 31 30 31 30 31 31 30 31 30 31]; 
    deltaT = 1;                
    firstT = 0.5*deltaT/24;                           
    lastT  = MonthDays(iM) - 0.5*deltaT/24;
    timeN  = MonthDays(iM) * 24/deltaT;
    time   = single(linspace(firstT, lastT, timeN));
    time   = time';

    netcdf.putVar(ncid, timeid, time);               % 写入新变量
    netcdf.close(ncid);                              % 关闭nc文件
end

【提醒】 为提高效率,若循环内未牵涉到不同步长之间的计算,可以使用 parfor 来提升效率。

(2)修改nc文件中的 “ET” 变量的“long_name”属性的值
ncid = netcdf.open('ncfile.nc','write'); % 以写的方式打开nc文件
varid = netcdf.inqVarID(ncid, 'ET')  % 获取变量的ID
netcdf.reDef(ncid) % 开启重定义模式
netcdf.putAtt(ncid, varid, 'long_name','Latent Heat Flux') % 重新放属性内容
netcdf.close(ncid) % 最后,关闭nc文件

相关参考:可结合matlab帮助详细学习
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨海深

感谢您的支持和鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值