爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13214|回复: 5

[程序设计] matlab读写.NC格式数据

[复制链接]

新浪微博达人勋

发表于 2020-12-26 18:13:32 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
matlab读写.NC格式数据

%=========读================


clc;  %清屏

close all;

datadir='F:\00_Project\Data\'; %指定批量数据所在的文件夹

filelist=dir([datadir,'*.nc']); %指定批量数据的类型

k=length(filelist);

%%任意取其中一个来看数据中所包含的变量特征,以为下面读取数据变量做铺垫

filename=[datadir,filelist(1).name];

ncid=netcdf.open(filename,'nowrite'); %打开nc文件

ncdisp(filename); %在命令窗中显示nc文件的变量

netcdf.close(ncid)

for s=1:1
    filename=[datadir,filelist(s).name];
   
    tempname='prec';

    TimeData  = ncread(filename,'time'); %读入变量time
    LonData  = ncread(filename,'lon'); %读入变量lon
    LatData  = ncread(filename,'lat'); %读入变量lat
    AData  = ncread(filename,tempname); %读入变量lrad
    %%展示数据
    figure (1);
    pcolor(LonData,LatData,AData(:,:,2)');
    shading flat;
    colormap(jet);
    colorbar;
    lim = caxis
    axis equal;
end
%=========写================
fileOutname='E:\Data\Data _forcing_03hr_010deg\2018Data_forcing_day_010deg.nc';
%创建一个存放数据的nc文件
ncid = netcdf.create(fileOutname,'64BIT_OFFSET');     %cmode 的值详见help
% 定义维度
lat_dimID = netcdf.defDim(ncid,'lat',M);
lon_dimID = netcdf.defDim(ncid,'lon',N);
time_dimID = netcdf.defDim(ncid,'time',days);
% 定义变量
varid_lat = netcdf.defVar(ncid,'latitude','NC_FLOAT',lat_dimID);
varid_lon = netcdf.defVar(ncid,'longitude','NC_FLOAT',lon_dimID);
varid_time = netcdf.defVar(ncid,'time','NC_INT',time_dimID);
varid_lrad = netcdf.defVar(ncid,'lrad','NC_FLOAT',[lon_dimID lat_dimID time_dimID]);
varid_prec = netcdf.defVar(ncid,'prec','NC_FLOAT',[lon_dimID lat_dimID time_dimID]);
% 定义变量属性
%  netcdf.putAtt(ncid,varid,'units','d');
%  netcdf.putAtt(ncid,varid3,'long_name','lrad');
netcdf.endDef(ncid);      %退出定义模式,进入数据模式以写入数据,很重要!!!
% 将数据写入变量
netcdf.putVar(ncid,varid_lat,LatData);
netcdf.putVar(ncid,varid_lon,LonData);
netcdf.putVar(ncid,varid_time,1:1:days);
netcdf.putVar(ncid,varid_lrad,A_day(:,:,:,1));
netcdf.putVar(ncid,varid_prec,A_day(:,:,:,2));
netcdf.close(ncid);

亲测可以实现!!!!



创建好的nc文件

创建好的nc文件
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2020-12-27 07:21:46 | 显示全部楼层
提一个小建议:建议楼主先搞清楚netcdf系列底层函数和ncread等高级高级函数之间的关系,读的部分里面不需要这么混用。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-12-29 11:44:56 | 显示全部楼层
二爷名声在外 发表于 2020-12-27 07:21
提一个小建议:建议楼主先搞清楚netcdf系列底层函数和ncread等高级高级函数之间的关系,读的部分里面不需要 ...

谢谢提醒 以后注意
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-6-7 11:32:27 | 显示全部楼层
请问我生成了一个矩阵360*181*37*70的数据,也可以用你的方法来生成一个360*181*37*70的nc文件么?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-6-8 15:01:15 | 显示全部楼层
出现乱点怎么办。。。。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2022-7-8 16:22:31 | 显示全部楼层
索引超过矩阵尺度咋整,,
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表