爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: Aires

[程序设计] Matlab读取nc文件常用命令总结

  [复制链接]
 楼主| 发表于 2017-7-21 14:08:56 | 显示全部楼层
游走 发表于 2017-7-21 09:30
就是文件出现破损,用netcdf无法读取,想把这部分文件的文件名写入一个txt文件,但是将名字写入txt这一个 ...

ncread会返回一个值,你可以用if判断一下,如果读取文件错误,可以再将这个文件的文件名写入txt文件。
密码修改失败请联系微信:mofangbao
发表于 2017-7-24 18:07:59 | 显示全部楼层
本帖最后由 yinger 于 2017-7-24 18:21 编辑

lon=[];lon=ncread(filename1,'longitude');
lat=[];lat=ncread(filename1,'latitude');
lev=[];lev=ncread(filename1,'level')
ti=[];ti=ncread(filename1,'time')
a=[];a=find(lon>=90 & lon<=100);
b=[];b=find(lat>=20 & lat<=30);    % a和b作为经度和纬度的指针
a(1)
b(1)
le=[];le=lev(1)
t=[];t=ti(1)
lon_num=[];lon_num=length(a);
lat_num=[];lat_num=length(b);
le_num=[];le_num=length(le);
t_num=[];t_num=length(t);
B=[];B=ncread(filename1,'d',[a(1) b(1) le(1) t(1)],[lon_num lat_num le_num t_num]);

读取4个层次的nc数据,输出如下结果a(1)=15
b(1)=15
le =

         200


t =

     1025616


其中le 是层次,t是时间,不知道应如何表示才对,请楼主赐教哈
附上数据说明
Dimensions:
           longitude = 55
           latitude  = 42
           level     = 4
           time      = 302   (UNLIMITED)
Variables:
    longitude
           Size:       55x1
           Dimensions: longitude
           Datatype:   single
           Attributes:
                       units     = 'degrees_east'
                       long_name = 'longitude'
    latitude
           Size:       42x1
           Dimensions: latitude
           Datatype:   single
           Attributes:
                       units     = 'degrees_north'
                       long_name = 'latitude'
    level   
           Size:       4x1
           Dimensions: level
           Datatype:   int32
           Attributes:
                       units     = 'millibars'
                       long_name = 'pressure_level'
    time     
           Size:       302x1
           Dimensions: time
           Datatype:   int32
           Attributes:
                       units     = 'hours since 1900-01-01 00:00:0.0'
                       long_name = 'time'
                       calendar  = 'gregorian'
    d        
           Size:       55x42x4x302
           Dimensions: longitude,latitude,level,time
           Datatype:   int16
           Attributes:
                       scale_factor  = 7.92e-09
                       add_offset    = -1.69e-05
                       _FillValue    = -3.28e+04
                       missing_value = -3.28e+04
                       units         = 's**-1'
                       long_name     = 'Divergence'
                       standard_name = 'divergence_of_wind'


密码修改失败请联系微信:mofangbao
发表于 2017-7-28 15:31:17 | 显示全部楼层
为什么我读完数据,再生成.nc文件,就不一样了?如何解决
密码修改失败请联系微信:mofangbao
发表于 2017-7-29 09:11:13 | 显示全部楼层
sst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]);  % 假如是读取SST数据
楼主,括号里的省略号表示看不明白代表啥意思,谢谢
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-7-29 13:35:56 | 显示全部楼层
qingqingqing 发表于 2017-7-29 09:11
sst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]);  % 假如是读取SST数据
楼主,括号里的省 ...

第一个表示你的文件名,后面两个表示如果你有time维或者是level维,你也要写上的。我这只是举个例子。
密码修改失败请联系微信:mofangbao
发表于 2017-7-31 14:12:30 | 显示全部楼层
其中的《sst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]);  % 假如是读取SST数据》中的[a(1) b(1) ...]是什么意思?matlab中运行不出结果。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-7-31 16:10:28 | 显示全部楼层
jodver@163.com 发表于 2017-7-31 14:12
其中的《sst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]);  % 假如是读取SST数据》中的[a(1) ...

nc文件读取是按矩阵的行列读取的,所以用find函数可以找到你要读取的数据矩阵的lon, lat的位置,你输出a(1), b(1)到命令窗口看一下就知道了。
密码修改失败请联系微信:mofangbao
发表于 2017-8-27 19:15:25 | 显示全部楼层
弱弱地问楼主,如果要读取单个站点数据,a、b find句应该怎么写?
密码修改失败请联系微信:mofangbao
发表于 2017-9-14 14:44:24 | 显示全部楼层
初学者,搞定第一步读数据,谢谢楼主~
密码修改失败请联系微信:mofangbao
发表于 2017-10-17 18:30:09 | 显示全部楼层
Pre=ncread('pr_day_BCSD_rcp45_r1i1p1_BNU-ESM_2008.nc','pr',[a(1) b(1) c(1)],[lon_num lat_num Time_num]);
我想读取nc数据的局部区域,请问这个代码错在哪了?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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