莫失莫忘- 2022-01-22 16:14 采纳率: 100%
浏览 632
已结题

批量读取nc文件,并限制经纬度和时间提取需要是降水影响因子。

问题遇到的现象和发生背景

使用批量读取nc文件,filelist读取不出来,在限制经纬度和时间时,总是出现索引报错

问题相关代码,请勿粘贴截图
%%
%批量读取nc  位势高度场、经向风、纬向风,比湿场,相对湿度
clear all
clc
datadir='D:\desktop\data'; %指定批量数据所在的文件夹
filelist=dir([datadir,'*.nc']);           %列出所有满足指定类型的文件
LonData=cell(1,1);
LatData=cell(1,1);
levelData1=cell(1,1);%存放位势高度场、经向风、纬向风的层数
levelData2=cell(1,1);%存放比湿的层数
TimeData=cell(1,1);
hgtData=cell(1,1);
uwndData=cell(1,1);
vwndData=cell(1,1);
shumData=cell(1,1);
k=length(filelist);
%读取位势高度场
for  s = 1:k
    ncid1 =[datadir,filelist(s).name];
    hgtData{1,1} = ncread(ncid1,'hgt'); %读入变量 位势高度场
    LonData{1,1}  = ncread(ncid1,'lon'); %读入变量lon 经度
    LatData{1,1}= ncread(ncid1,'lat'); %读入变量lat 纬度
    levelData1{1,1}= ncread(ncid1,'level');%存放位势高度场、经向风、纬向风的层数
    TimeData{1,1}= ncread(ncid1,'time');%存放位势高度场,比湿,风场的时次
    %读取比湿场
    ncid2 =[datadir,filelist(s).name];
    shumData{1,1}= ncread(ncid2,'shum'); %读取比湿
    levelData2{1,1}= ncread(ncid2,'level');%存放比湿的层数
    %读取经向风
    ncid3 =[datadir,filelist(s).name];
    uwndData{1,1} = ncread(ncid3,'uwnd'); %读入变量 经向风
    %读取纬向风
    ncid4 =[datadir,filelist(s).name];
    vwndData{1,1} = ncread(ncid4,'vwnd'); %读入变量 纬向风
    %读取相对湿度
    ncid5 = [datadir,filelist(s).name];
    rhumDara{1,1} = ncread(ncid5,'rhum');%读取相对湿度
    levelData3{1,1}= ncread(ncid5,'level');%存放比湿的层数
    save('D:\\desktop\\data\\climateplot.mat','hgtData','shumData','uwndData','vwndData','LonData','LatData','hgtData','rhumData');%获取数据
end
%%
%获取需要的数据,2000年-2021年,5,6,7,8月,纬向风,比湿,经向风选取850hPa,位势高度选取200,500,850hPa,
%109°36′-111°29′,北纬24°15′-26 °23′E,
shumData1=cell(21,4);%建立指针  5-8月的比湿
rhumData = cell(21,4);%建立指针 5-8月的相对湿度
hgtData2001=cell(21,4);%建立指针  5-8月的200hPa位势高度场
hgtData5001=cell(21,4);%建立指针  5-8月的500hPa位势高度场
hgtData8501=cell(21,4);%建立指针  5-8月的850hPa位势高度场
uwndData1=cell(21,4);%建立指针  5-8月的经向风
vwndData1=cell(21,4);%建立指针  5-8月的纬向风
k=529:12:872;%表示从2000.5-2020.8
    for m=1:21
        for n=1:4
shumData1{m,n}=squeeze(shumData{1,1}(43:45,9:11,3,k(m)+(n-1)));%存取5\6\7\8月份比湿数据,3代表850hPa,109:111经度,24-26纬度
uwndData1{m,n}=squeeze(uwndData{1,1}(43:45,9:11,3,k(m)+(n-1)));%存取5\6\7\8月份经向风数据,3代表850hPa,109:111经度,24-26纬度
vwndData1{m,n}=squeeze(vwndData{1,1}(43:45,9:11,3,k(m)+(n-1)));%存取5\6\7\8月份纬向风数据,3代表850hPa,109:111经度,24-26纬度
rhumData{m,n}= squeeze(rhumData{1,1}(43:45,9:11,10,k(m)+(n-1)));%存取5\6\7\8月份相对湿度数据,3代表850hPa,109:111经度,24-26纬度
hgtData8501{m,n}=squeeze(hgtData{1,1}(43:45,9:11,3,k(m)+(n-1)));%850hPa位势高度
hgtData5001{m,n}=squeeze(hgtData{1,1}(43:45,9:11,6,k(m)+(n-1)));%500hPa位势高度
hgtData2001{m,n}=squeeze(hgtData{1,1}(43:45,9:11,10,k(m)+(n-1)));%200hPa位势高度

        end
    end
save('D:\\desktop\\data\\climateHC.mat','hgtData2001','shumData1','uwndData1','vwndData1','hgtData5001','hgtData8501','rhumData');%获取数据

运行结果及报错内容

filelist读取不出来,54行位置1处索引超出数组边界

我的解答思路和尝试过的方法

我尝试使用单个读取模型,不采用批量读取文件可解决filelist读取不出的错误。但是在经纬度和时间限制下提取还是出现索引报错

我想要达到的结果

成功准确的提取出影响因子并保存
数据链接:https://www.aliyundrive.com/s/vrYRDKmXumX

  • 写回答

2条回答 默认 最新

  • 有问必答小助手 2022-01-24 15:06
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月1日
  • 已采纳回答 1月24日
  • 创建了问题 1月22日

悬赏问题

  • ¥15 TMC2209串口模式下读取不到寄存器的值串口助手蓝色字体是发过去的消息,绿色字体是收到的消息,第二行发送读取寄存器的指令但是没有读取到寄存器的值串口助手如下图:接线如下图,如何解决?
  • ¥30 itest不允许查看成绩怎么办
  • ¥15 高通安卓11提取完整线刷包软件,或者优博讯dt50顺丰刷机包
  • ¥20 C,有个译码器,换了信道就跑不出原来数据
  • ¥15 MIMIC数据库安装问题
  • ¥60 基于JTag协议开发Fpga下载器上位机,哪位大🐂有偿指导?
  • ¥20 全书网Java爬取数据
  • ¥15 怎么获取红包封面的原始链接,并且获取红包封面序列号
  • ¥100 微信小程序跑脚本授权的问题
  • ¥100 房产抖音小程序苹果搜不到安卓可以付费悬赏