爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12079|回复: 13

[程序设计] matlab读nc文件中的数组顺序变反?

[复制链接]

新浪微博达人勋

发表于 2013-10-28 22:26:23 | 显示全部楼层 |阅读模式

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

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

x
用matlab读取nc文件,vwnd数组是这样的:vwnd(time,lev,lat,lon)=(12,17,73,144)
一开始是这样读的:
lon = fid{'lon'}(:);
lat = fid{'lat'}(:);
lat = lat([end:-1:1]);    %-90~90
lev = fid{'level'}(:)*100;   
nt = length(fid{'time'}(:));
但是报错:Cell contents reference from a non-cell array object.
不知道是为什么?
我没有下netcdf插件,直接用的netcdf.open

后来改成这样:


file = 'D:\netcdf\vwnd.mon.ltm.nc';    %1981-2010monthly mean
fid = netcdf.open(file,'NC_NOWRITE');

[ndims,nvars,ngatts,unlimdimid] = netcdf.inq(fid);

varid1 = netcdf.inqVarID ( fid, 'lat' ) ;
lat = netcdf.getVar ( fid, varid1 ) ;
lat = lat([end:-1:1]);    %-90~90

varid2 = netcdf.inqVarID ( fid, 'lon' ) ;
lon = netcdf.getVar ( fid, varid2 ) ;

varid3 = netcdf.inqVarID ( fid, 'level' ) ;
lev = netcdf.getVar ( fid, varid3 ) ;
lev = lev*100;

varid4 = netcdf.inqVarID ( fid, 'time' ) ;
time = netcdf.getVar ( fid, varid4 ) ;
nt = length(time);

varid5 = netcdf.inqVarID ( fid, 'vwnd' ) ;
vwnd0 = netcdf.getVar ( fid, varid5 ) ;



查看了vwnd0的维数是144    73    17    12
也就是lon lat lev time.

这不是和数组本身维数顺序完全相反么?
请问为什么会这样?数组是怎么读的?
谢谢啦~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-29 09:15:31 | 显示全部楼层
用ncdisp查看一下nc文件中的变量信息
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-29 10:30:24 | 显示全部楼层
用ncread试着读一下
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-29 14:27:26 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-10-29 16:09:20 | 显示全部楼层
chaseechoes 发表于 2013-10-29 14:27
我是2009b版本的,所以ncread 和ncdisp都用不了。。
难道要下netcdf的插件?
可是用netcdf.getVar是可以 ...

那你就看下netcdf.getVar的具体用法,有没有应用实例什么的。help一下。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-10-30 18:11:19 | 显示全部楼层
Aires 发表于 2013-10-29 16:09
那你就看下netcdf.getVar的具体用法,有没有应用实例什么的。help一下。

嗯嗯,解决了,数组读出来以后每一维的顺序的确会反过来,处理的时候注意就好了~
谢谢~~
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-3 16:04:52 | 显示全部楼层
感谢楼主的分享,好东西
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-3 19:40:58 | 显示全部楼层
不同的插件读出来是不一样的。同一个数据,matlab2009和2013读出来是相反的。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-11-3 22:57:56 | 显示全部楼层
cyqiankun 发表于 2013-11-3 19:40
不同的插件读出来是不一样的。同一个数据,matlab2009和2013读出来是相反的。

哦哦,难怪别人用2013很正常。。matlab各个版本差的挺大的啊,换起来多不方便。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-11-4 03:24:51 | 显示全部楼层
貌似是反的。我一直是用netcdf.getVar把所有的读出来看看维度是怎样的再说。。。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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