场景:发现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帮助详细学习
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐