爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18704|回复: 29

[程序设计] matlab批量读取nc和写出nc格式数据

[复制链接]
发表于 2015-3-26 20:24:03 | 显示全部楼层 |阅读模式

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

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

x
分享一个批量读取nc和写出nc格式数据的matlab程序。程序读取1981到2010年的数据,数据的命名规则为“Air.年份.nc”,挑选所需要的部分,再按照年份写出,命名为“年份Air.nc”。程序编的比较简单,主要用于读取和写出,仅供参考,欢迎批评指正。

clear;
clc;
n=0;
for i=1981:2010
    str=strcat('G:\ncep\height\Air.',num2str(i),'.nc');
    ncid= netcdf.open(str,'NC_NOWRITE');
    varid=netcdf.inqVarID(ncid,'air');
    data=netcdf.getVar(ncid,varid);
    n=n+1;
    A{n}=data;
    clear data;
end

for i=1:30
    d1=A{i};
    d1_2=d1(:,:,1:12,201:211); %挑选数据

   str1=strcat('G:\ncep\20150316\Air\',num2str(i+1980),'Air.nc');
   ncid=netcdf.create(str1,'NC_NOCLOBBER');
  %定义维数为四维
  dimidx=netcdf.defDim(ncid,'lon',144);
  dimidy=netcdf.defDim(ncid,'lat',73);
  dimidz=netcdf.defDim(ncid,'lev',12);
  dimidt=netcdf.defDim(ncid,'t',11);
%定义变量
  varid=netcdf.defVar(ncid,'air','double',[dimidt dimidz dimidy dimidx]);
  %给变量赋值
  netcdf.putVar(ncid,varid,d1_2);
  netcdf.close(ncid);
  clear d1 d1_2 ncid varid;
end
密码修改失败请联系微信:mofangbao
发表于 2015-3-26 22:07:21 | 显示全部楼层
大牛啊!想问个问题:我从ECMWF上下载的nc 数据用MATLAB (12a)打开出错,命令为:ncdisp ('filename')         错误为:
Error using netcdflib
The NetCDF library encountered an error during execution of 'open' function -
'Invalid argument (22)'.

Error in netcdf.open (line 60)
        [varargout{:}] = netcdflib ( 'open', filename, varargin{1} );

Error in internal.matlab.imagesci.nc/openToRead (line 1249)
            this.ncRootid = netcdf.open(this.Filename,'NOWRITE');

Error in internal.matlab.imagesci.nc (line 122)
                    this.openToRead();

Error in ncdisp (line 51)
ncObj   = internal.matlab.imagesci.nc(ncFile)
麻烦帮忙看看!万分感谢!
密码修改失败请联系微信:mofangbao
 成长值: 32430
发表于 2015-3-26 23:34:47 | 显示全部楼层
本帖最后由 二爷名声在外 于 2015-3-26 23:36 编辑

建议换新版本试一下吧…而且这个论坛上发过的很多了…
密码修改失败请联系微信:mofangbao
 成长值: 32430
发表于 2015-3-26 23:35:00 | 显示全部楼层
侠骨柔情 发表于 2015-3-26 22:07
大牛啊!想问个问题:我从ECMWF上下载的nc 数据用MATLAB (12a)打开出错,命令为:ncdisp ('filename')    ...

1.为什么还用旧版本……
2.程序能不能放的全一点
密码修改失败请联系微信:mofangbao
发表于 2015-3-27 17:05:05 | 显示全部楼层
二爷名声在外 发表于 2015-3-26 23:34
建议换新版本试一下吧…而且这个论坛上发过的很多了…

大神好,我想请问一下,批量读取trmm卫星的gz文件之后,该怎么对她进行处理?
clc;clear
datadir='F:\somecode\2000-2008\data\'; %指定批量数据所在的文件夹
filelist=dir([datadir,'*.gz']); %指定批量数据的类型
k=length(filelist);
for s=1:k
filename=[datadir,filelist(s).name];
sst=read_tmi_averaged_v7(filename);
end
用的是这代码,然后我看读出来的sst只是一个文件的数据,想求八年的平均,如何是好?
密码修改失败请联系微信:mofangbao
 成长值: 32430
发表于 2015-3-27 17:08:39 | 显示全部楼层
fghjnn 发表于 2015-3-27 17:05
大神好,我想请问一下,批量读取trmm卫星的gz文件之后,该怎么对她进行处理?
clc;clear
datadir='F:\s ...

没用过,也不知道数据结构,无解
密码修改失败请联系微信:mofangbao
发表于 2015-3-27 19:03:58 | 显示全部楼层
二爷名声在外 发表于 2015-3-27 17:08
没用过,也不知道数据结构,无解

好吧,感谢回复
密码修改失败请联系微信:mofangbao
发表于 2015-3-27 19:09:26 | 显示全部楼层
matlab的读写还简单的
密码修改失败请联系微信:mofangbao
发表于 2015-3-27 19:51:55 | 显示全部楼层
如果没有大内存,还是别用MATLAB。
密码修改失败请联系微信:mofangbao
发表于 2015-3-30 16:06:45 | 显示全部楼层
赞楼主一个!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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