请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 324|回复: 3

[程序设计] 用MATLAB读取和编写nc文件

[复制链接]

新浪微博达人勋

发表于 2020-2-11 20:59:31 | 显示全部楼层 |阅读模式

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

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

x
clear all;close all;clc;
%% 创建nc文件
ncid = netcdf.create('D:\BOB\marine\uv_cmems_lev1.nc','CLOBBER');    %创建一个存放数据的nc文件

%% 定义维度参数
    % dimid = netcdf.defDim(ncid,dimname,dimlen)   
    dimidx = netcdf.defDim(ncid,'lon',121);
    dimidy = netcdf.defDim(ncid,'lat',109);
    dimidz = netcdf.defDim(ncid,'time',2048);
   
%% 定义新的变量
     varid = netcdf.defVar(ncid,'uvel','double',[dimidx dimidy dimidz]);
    varid2 = netcdf.defVar(ncid,'vvel','double',[dimidx dimidy dimidz]);%%不知道为什么之前写为nc_short怎么也没有办赋值,很难受
    % varid = netcdf.defVar(ncid,varname,xtype,dimids)
    varid3 = netcdf.defVar(ncid,'lon','NC_FLOAT',[dimidx]);
    varid4 = netcdf.defVar(ncid,'lat','NC_FLOAT',[dimidy]);
    varid5 = netcdf.defVar(ncid,'time','double',[dimidz]);
   
%% 新变量的属性
     netcdf.putAtt(ncid,varid,'units','m s-1');                                                     
     netcdf.putAtt(ncid,varid,'long_name','Eastward velocity');
     netcdf.putAtt(ncid,varid2,'units','m s-1');
     netcdf.putAtt(ncid,varid2,'long_name','Northward velocity');
    netcdf.putAtt(ncid,varid3,'units','degress_east');
    netcdf.putAtt(ncid,varid3,'long_name','Longitude');
    netcdf.putAtt(ncid,varid3,'valid_min','= 80');
    netcdf.putAtt(ncid,varid3,'valid_max','= 90');
    netcdf.putAtt(ncid,varid4,'units','degress_north');
    netcdf.putAtt(ncid,varid4,'long_name','Latitude');
    netcdf.putAtt(ncid,varid4,'valid_min','= 4');
    netcdf.putAtt(ncid,varid4,'valid_max','= 13');
    netcdf.putAtt(ncid,varid4,'step','= 0.083336');
    netcdf.putAtt(ncid,varid5,'units','hours since 1950-01-01 00:00:00');
    netcdf.endDef(ncid);
   
%% 给新变量赋值
%读取数据
    file1='D:/BOB/data/uv/u0/u0_cmems_lev1.nc';
    file2='D:/BOB/data/uv/v0/v0_cmems_lev1.nc';
    u0=ncread(file1,'uo');
    v0=ncread(file2,'vo');
    lon0=ncread(file1,'longitude');
    lat0=ncread(file1,'latitude');
    t=ncread(file1,'time');
    u0=squeeze(u0);v0=squeeze(v0);
    u1=u0(:,:,1:2048);v1=v0(:,:,1:2048);
    t1=t(1:2048,1);
   
%赋值
    netcdf.putVar(ncid,varid,u1);
    netcdf.putVar(ncid,varid2,v1);
    netcdf.putVar(ncid,varid3,lon0);
    netcdf.putVar(ncid,varid4,lat0);
    netcdf.putVar(ncid,varid5,t1);
    netcdf.close(ncid);
   
%% 检查新的nc文件
file3='D:\BOB\marine\uv_cmems_lev1.nc';
% ncdisp(file3);
u3=ncread(file3,'uvel');
u31=squeeze(u3(1,1,:));
v3=ncread(file3,'vvel');
v31=squeeze(v3(1,1,:));
lon1=ncread(file3,'lon');
lat1=ncread(file3,'lat');
u_t=ncread(file3,'time');
密码修改失败请联系qq:937062711

新浪微博达人勋

 楼主| 发表于 6 天前 | 显示全部楼层
忘了,给数据去除异常值,无语   

ssh(ssh==6.103701889514923e-04)=nan;
ssh(ssh==-6.103701889514923e-04)=nan;
密码修改失败请联系qq:937062711
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 5 天前 | 显示全部楼层
谢谢楼主!嘻嘻
密码修改失败请联系qq:937062711
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 昨天 14:22 | 显示全部楼层

这个好
matlab处理nc格式数据简单易学
密码修改失败请联系qq:937062711
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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