爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 12369|回复: 6

[讨论] 参考matlab读取NC资料的方法 为什么我不成功啊?新人求指点~~

[复制链接]

新浪微博达人勋

发表于 2016-10-31 19:14:24 | 显示全部楼层 |阅读模式

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

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

x
感觉MATLAB函数很多 比较方便,新人想学习,可是读取数据就难到我了,我是2014版,用了ncdisp  ncread的方法,不知道为什么报错。我想读取一个全球12874天的逐日最低温NCEP资料,结构是192*94*12874,想提取每天的 中国区域的部分,是我的命令哪里有问题吗?求指点
为什么生成temp就能成功 ,同样的读取tmin就不行了?
ncdisp('E:\data\NCEP-1\dailytmin.nc');
Source:
           E:\data\NCEP-1\dailytmin.nc
Format:
           classic
Global Attributes:
           Conventions = 'COARDS'
           title       = 'daily NMC reanalysis (1979)'
           history     = 'created 95/03/13 by Hoop (netCDF2.3)'
           description = 'Data is from NMC initialized reanalysis
                         (4x/day).  It consists of T62 variables interpolated to
                         pressure surfaces from model (sigma) surfaces.'
           platform    = 'Model'
           references  = 'http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.html'
Dimensions:
           lon  = 192
           lat  = 94
           time = 12784 (UNLIMITED)
Variables:
    lat
           Size:       94x1
           Dimensions: lat
           Datatype:   single
           Attributes:
                       units         = 'degrees_north'
                       actual_range  = [88.542      -88.542]
                       long_name     = 'Latitude'
                       standard_name = 'latitude'
                       axis          = 'Y'
    lon
           Size:       192x1
           Dimensions: lon
           Datatype:   single
           Attributes:
                       units         = 'degrees_east'
                       long_name     = 'Longitude'
                       actual_range  = [0       358.125]
                       standard_name = 'longitude'
                       axis          = 'X'
    time
           Size:       12784x1
           Dimensions: time
           Datatype:   double
           Attributes:
                       units         = 'hours since 1-1-1 00:00:0.0'
                       long_name     = 'Time'
                       actual_range  = [17338824  17347560]
                       delta_t       = '0000-00-01 00:00:00'
                       standard_name = 'time'
                       axis          = 'T'
    tmin
           Size:       192x94x12784
           Dimensions: lon,lat,time
           Datatype:   int16
           Attributes:
                       long_name               = 'Daily Minimum Temperature at 2 m'
                       unpacked_valid_range    = [150  400]
                       actual_range            = [165.6         307.7]
                       units                   = 'degK'
                       add_offset              = 477.65
                       scale_factor            = 0.01
                       missing_value           = 32766
                       precision               = 2
                       least_significant_digit = 1
                       GRIB_id                 = 16
                       GRIB_name               = 'T MIN'
                       var_desc                = 'Minimum Temperature'
                       dataset                 = 'NCEP Reanalysis Daily Values'
                       level_desc              = '2 m'
                       statistic               = 'Daily Minimum'
                       parent_stat             = 'Individual Obs'
                       valid_range             = [-32765  -7765]
>> lon=ncread('E:\data\NCEP-1\dailytmin.nc','lon');
>> lat=ncread('E:\data\NCEP-1\dailytmin.nc','lat');
>> time=ncread('E:\data\NCEP-1\dailytmin.nc','time');
>> temp=ncread('E:\data\NCEP-1\dailytmin.nc','tmin',[1 1 1],[50 50 365]);
>> a=find(lon>=70&lon<=140);
>> b=find(lat>=15&lat<=55);
>> lon_num=length(a);
>> lat_num=length(b);
>> time_num=length(time);
>> tmin=ncread('E:\data\NCEP-1\dailytmin.nc','tmin',[a(1) b(1) time(1)],[lon_num lat_num time_num]);
错误使用 netcdflib
NetCDF 库在执行 'getVarsShort' 函数期间遇到错误 - 'Index exceeds dimension bound (NC_EINVALCOORDS)'。
出错 netcdf.getVar (line 136)
    data = netcdflib(funcstr,ncid,varid,varargin{:});
出错 internal.matlab.imagesci.nc/read (line 635)
                data  = netcdf.getVar(gid, varid, ...
出错 ncread (line 58)
vardata = ncObj.read(varName, varargin{:});


以下是错误的地方:1 第136行:  data = netcdflib(funcstr,ncid,varid,varargin{:});  
2 第635行: data  = netcdf.getVar(gid, varid, ...
                    start, count, stride);
3 第58行:vardata = ncObj.read(varName, varargin{:});
QQ图片20161031191346.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-10-31 19:43:38 | 显示全部楼层
'Index exceeds dimension bound'   索引超出维度,就是说你读取数据的时候读多了,本来就俩数,你读了三个。如果想在读变量时就直接获取指定范围的数据,建议好好看一下ncread函数的帮助。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-10-31 20:30:02 | 显示全部楼层
Lighting 发表于 2016-10-31 19:43
'Index exceeds dimension bound'   索引超出维度,就是说你读取数据的时候读多了,本来就俩数,你读了三个 ...

经纬度 时间 不是3维吗 那为什么temp可以读呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-10-31 21:43:34 | 显示全部楼层
jolincai 发表于 2016-10-31 20:30
经纬度 时间 不是3维吗 那为什么temp可以读呢?


                               
登录/注册后可看大图

[1 1 1]表示每一维索引的起始点,[50 50 365]表示每一维读取50,50,365个数。
temp变量本身就是50X50X365,你读取了51X51X366的数组可定不行。
[1 1 1],[49,49,364]这样就没问题了。
还是建议在matlab中使用函数时先看以下函数帮助文档。

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2016-11-1 10:22:34 | 显示全部楼层
Lighting 发表于 2016-10-31 21:43
[1 1 1]表示每一维索引的起始点,[50 50 365]表示每一维读取50,50,365个数。
temp变量本身就是50X50 ...

不好意思啊  再问一下,temp是个例子,表示三维数据没错啊...我是从经度第一个点开始 读取50个,纬度第一个点开始读取50个,时间第一个点开始读取365个,这个可以读。那我想读取NC资料中的tmin变量,从大于东经70°开始的点读取,个数为length(a),纬度从大于北纬15度开始,个数为length(b),时间从第一个时间开始到最后一个时次 ,这样为什么就不对呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-11-23 18:33:33 | 显示全部楼层
请问楼主 解决了没哈,我也遇到了这样子的情况{:eb303:}{:eb303:}{:eb303:}
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-9-5 13:30:36 | 显示全部楼层
请问一下您怎么解决的呢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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