分类: WINDOWS
2006-04-22 23:30:07
netcdf插件安装和.nc格式数据的读取
――For Matlab in WindowsXP
从事海洋和大气专业的学习和研究时,可能需要从网上下载一些数据。其数据存储的格式五花八门,为了方便数据交换,统一的数据格式显得尤为重要。其中比较广泛使用的就是netcdf格式,通常后缀为.nc(也可能为.cdf)。作者在实际中用matlab处理了一些此类数据,简单说来就是安装一个插件即可。现将我们的方法具体地写出,以供参考。(Matlab插件(Version
(注:Netcdf forMatlab插件下载自)
一、netcdf 插件安装
1、将本netcdf文件夹考到一盘符上(最好在根目录下,位置醒目,防止当作普通文件夹删除),如f:\netcdf;
2、打开matlab,将工作目录设为netcdf文件夹。如netcdf文件夹放在f盘根目录下,就将matlab的当前路径设为f:\netcdf\install files;
3、运行install files文件夹里的mexcdf53_pcwin_install.m和netcdf_install.m;
4、进行第3步后,会在install files文件夹下产生两个文件夹,分别是mexcdf53_pcwin和netcdf;将mexcdf53_pcwin文件夹下的mexcdf53.dll和netcdf.dll文件考到C:\MATLAB6p5\bin及C:\MATLAB6p5\bin\win32目录下;
5、将第3步产生的netcdf及mexcdf53_pcwin文件夹及其子文件夹添加到搜索目录下。
具体步骤为:matlab主窗口下依次点击fileèset pathèadd with subfolders,选中f:\netcdf\install files文件夹,单击确定点击saveèclose,至此安装完成。
(注:对于matab6.1或更低版本的使用者,在进行第5步之前必须先将F:\netcdf\install file\netcdf\下的子文件夹名的‘@’符号删除(6.1版本好像在添加路径时不识别此符号))。
二、nc格式数据文件的读取
1、在matlab命令窗口下键入ncbrowser,回车,打开要读取的nc文件,就可以出现一个界面。界面分三列,选中中间一列的某一变量,就可以通过点击第三列查看该变量的基本信息,包括变量名,单位等信息。选中变量后点击右下角的listing可将该变量在窗口中列出(数组很大时慎用,可能要耗费大量的时间),点击extrat则可将该变量输出到matlab workspace中(过程中可以修改输出的变量名),之后就可对该变量进行操作。
2、第1步中,一个ncbrowser命令只能打开一个nc文件进行读取、导出等,如果要对多个nc文件进行操作的话,可参考example中的程序read_data_nc.m。
3、特别注意,有的nc数据为方便存储,在实际数据的基础上进行了一些换算(不是所有的nc都有这种换算),我们要把它还原回来。
%数据还原换算公式是:实际数据 = nc数据 * scale_factor + add_offset。
%scale_factor和add_offset的数值可以从ncbrower(第1步)得到。
%或在命令窗口中输入ncdump,打开nc文件,据matlab窗口的显示可知.
4、文件夹example中提供了一个实例,数据为
三、netcdf数据的封装
如需要,我们也可以将ASCII数据封装成netcdf格式的数据。“.\其他”文件夹下提供了一个程序generate_nc_file.m,供参考。
还有很多方法可以读取netcdf格式的数据,如Fortran,GrADS等等,作者在这方面不了解,有兴趣的同学可以仔细研究。
以上纯属个人经验,可能还有很多内容未涉及。本guide的初批使用者为我们提供了一些有用的意见,使本guide更趋完善。
欢迎广大读者指正、交流。
QQ:70499425 53346592
文件:
netcdf.rar
大小:
486KB
下载:
下载
chinaunix网友2008-07-30 22:27:31
Garly,你好! 我在用netcdf的工具箱时遇到这样的问题:从nc文件中提取出变量如8*170*170的数组,var(8,:,:)都为0,而我在linux下查看var(8,:,:)不为0;nc文件是wrf的输出文件,文件大小为2.25G,格式为classic(及netcdf1),我把var的数据在linux下用ncdump print出来,保存为txt,在xp下导入matlab,发现var(1:7,:,:)的数据又是和txt一致的,在整个nc文件中有些变量都正常,有些(8,:,:)和(8,:,:,:)都是0.不知道是什么原因。我用的是R14,nc插件就是上面的附件! 你有没有遇到过相同的事? 有什么建议?感激不尽! ps.在linux下面有没有哪个matlab的nc插件可以推荐?我想试下在linux下用matlab读nc。 在linux下装了matlab(R14),但没有找到合适的nc插件或toolbox。试了ncx觉得不好用(不稳定,而且不认我的nc文件),mexnc setpath后好像也用不了。 现在用matlab读nc数据有问题,觉得挺头大的。
chinaunix网友2008-07-30 22:27:31
Garly,你好! 我在用netcdf的工具箱时遇到这样的问题:从nc文件中提取出变量如8*170*170的数组,var(8,:,:)都为0,而我在linux下查看var(8,:,:)不为0;nc文件是wrf的输出文件,文件大小为2.25G,格式为classic(及netcdf1),我把var的数据在linux下用ncdump print出来,保存为txt,在xp下导入matlab,发现var(1:7,:,:)的数据又是和txt一致的,在整个nc文件中有些变量都正常,有些(8,:,:)和(8,:,:,:)都是0.不知道是什么原因。我用的是R14,nc插件就是上面的附件! 你有没有遇到过相同的事? 有什么建议?感激不尽! ps.在linux下面有没有哪个matlab的nc插件可以推荐?我想试下在linux下用matlab读nc。 在linux下装了matlab(R14),但没有找到合适的nc插件或toolbox。试了ncx觉得不好用(不稳定,而且不认我的nc文件),mexnc setpath后好像也用不了。 现在用matlab读nc数据有问题,觉得挺头大的。
nuistlq2008-06-03 17:43:33
谢谢Garly为我们提供非常有用的附件 我按照你的方法安装好了netcdf 但是打开nc数据出现以下错误 Garly ## NCBrowser is a work-in-progress. ## Not all menu items are implemented. ## See "help ncbrowser". ??? Error using ==> class Not a known object type. Error in ==> f:\netcdf\install\netcdf\ncitem\ncitem.m On line 73 ==> result = class(theStruct, 'ncitem'); Error in ==> f:\netcdf\install\netcdf\netcdf\netcdf.m On line 409 ==> result = class(theStruct, 'netcdf', ncitem(theFilename)); Error in ==> f:\netcdf\install\n
nuistlq2008-06-03 17:43:33
谢谢Garly为我们提供非常有用的附件 我按照你的方法安装好了netcdf 但是打开nc数据出现以下错误 Garly ## NCBrowser is a work-in-progress. ## Not all menu items are implemented. ## See "help ncbrowser". ??? Error using ==> class Not a known object type. Error in ==> f:\netcdf\install\netcdf\ncitem\ncitem.m On line 73 ==> result = class(theStruct, 'ncitem'); Error in ==> f:\netcdf\install\netcdf\netcdf\netcdf.m On line 409 ==> result = class(theStruct, 'netcdf', ncitem(theFilename)); Error in ==> f:\netcdf\install\n
chinaunix网友2008-06-02 10:12:58
请问生成nc数据时,,add_offset 和Scale_factor的具体数值,怎么得到? 有相关函数么?还是自己计算?