利用Matlab编程实现对NetCDF数据针对某一坐标按时间提取风、流、水蒸气等变量信息
一、NetCDF数据介绍
NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。
二、数据下载
- 进入网址 https://www.ecmwf.int/ 申请一个账号,注册流程简单,按操作提示完成即可。
- 文件下载,找到数据集,填写检索参数,即可下载。
三、数据提取需求
利用Matlab编程实现提取**地区三个坐标点的风(u10、v10)、总降雨(tp)、水蒸气含量(tcwv)信息,且输出结果组织如下表:
时间 | u10 | v10 | tp | tcwv |
---|---|---|---|---|
20100101 | ||||
20100102 | ||||
…… | ||||
20130101 | ||||
…… | ||||
…… |
四、数据提取思想
要想利用编程提取,我们首先需要学习一下NetCDF的文件组织形式:
1、读取NetCDF的源数据信息。在Matlab2015带有读取该文件类型的函数:ncdisp('path'),示例如下:
ncdisp('C:\Users\Administrator\Desktop\dataset\2017\1月份\_grib2netcdf-webmars-public-svc-green-002-6fe5cac1a363ec1525f54343b6cc9fd8-4vMyn2.nc')
2、读取NetCDF的变量信息。在Matlab2015带有读取该文件变量的函数:ncread('path','变量的名称'),示例如下:
ncread('C:\Users\Administrator\Desktop\dataset\2017\1月份\_grib2netcdf-webmars-public-svc-green-002-6fe5cac1a363ec1525f54343b6cc9fd8-4vMyn2.nc','time')
ncread('C:\Users\Administrator\Desktop\dataset\2017\1月份\_grib2netcdf-webmars-public-svc-green-002-6fe5cac1a363ec1525f54343b6cc9fd8-4vMyn2.nc','longitude')
3、由上面提取的变量,在Matlab查看可知:
变量数据结构:由下知,u10、v10、tp、tcwv变量空间索引为 经度 维度 时间
time 30x1 int32
latitude 721x1 single (可知经纬度间隔,方便推算对应经纬度下变量的空间坐标索引)
longitude 1440x1 single(可知经纬度间隔,方便推算对应经纬度下变量的空间坐标索引)
u10 1440x721x30 double
v10 1440x721x30 double
tp 1440x721x30 double
tcwv 1440x721x30 double
五、Matlab代码实现
clear
close allsavedir = 'I:\feng_liu_data\result\'; % 保存excel的路径
point = [50 3;93 1.5;120 6.5]; % 经纬度的坐标点
startYear = 2017;endYear = 2019; % 数据起始年份%遍历文件夹找寻下载的NetCDF文件
j = 1;
for year = startYear : endYear % 遍历年份maindir = ['I:\feng_liu_data\datset\' num2str(year) '\']; % nc文件的路径,是年份再上一级的路径,因为我的路径是:I:\feng_liu_data\datset\里面有三个文件夹(2017、2018、2019),每个年份文件夹里有12个月文件夹,每个文件夹里才是NC文件subdir = dir( maindir ); % 读取maindir文件夹中的所有文件名,返回一列for i = 1 : length( subdir )if( isequal( subdir( i ).name, '.' ) || ...isequal( subdir( i ).name, '..' ) || ...~subdir( i ).isdir ) % 如果不是目录跳过continue;endsubdirpath1 = fullfile( maindir, subdir( i ).name, '*.nc' );file = dir( subdirpath1 ); % 在这个子文件夹下找后缀为nc的文件 for jj = 1 : length( file ) % 遍历文件filedir{j} = fullfile( maindir, subdir( i ).name); % 保存文件目录filepath{j} = fullfile( maindir, subdir( i ).name, file( jj ).name ); % 保存文件路径filename{j} = file(jj).name; % 保存文件名字j = j + 1;endend
end% 建立一些空的变量,用来记录所有时间下的数据
year_u10 = [];year_v10 = [];year_tp = [];year_tcwv = [];year_time = [];month = 1;thisYear = startYear;
for i = 1 : j-1% 读取NC文件的时间、经纬度time = ncread(filepath{i},'time'); longitude = ncread(filepath{i},'longitude');latitude = ncread(filepath{i},'latitude');% 找到对应坐标下的序号for k = 1 : size(point,1)index_lon(k) = (point(k,1)/0.25)+1;index_lat(k) = (90-point(k,2))/0.25+1;end% 读取要保存的信息u10 = ncread(filepath{i},'u10');v10 = ncread(filepath{i},'v10');tp = ncread(filepath{i},'tp');tcwv = ncread(filepath{i},'tcwv');% 将对应经纬度下的所有时间变量数据筛选出存入下面变量中new_u10 =[];new_v10 =[];new_tp =[];new_tcwv =[];for k = 1 : size(point,1)new_u10(k,:) = u10(index_lon(k),index_lat(k),:);new_v10(k,:) = v10(index_lon(k),index_lat(k),:);new_tp(k,:) = tp(index_lon(k),index_lat(k),:);new_tcwv(k,:) = tcwv(index_lon(k),index_lat(k),:);end% 写入到刚刚这些变量,用于最后输出year_u10 = [year_u10 new_u10];year_v10 = [year_v10 new_v10];year_tp = [year_tp new_tp];year_tcwv = [year_tcwv new_tcwv];% 记录时间n = length(time);thisTime = num2str(thisYear*10000 + month*ones(n,1)*100 + [1:n]');%根据已有数据是2017年到2019年,按照time个数推算日期year_time = [year_time;thisTime];%计算月份month = month + 1;if month == 13 %判断一年是否结束thisYear = thisYear + 1;month = 1;end
endq=[];r=[];%用来存放输出EXCLE的名称的坐标点
for k = 1 : size(point,1)data = cell( length(year_time)+1,5);%由于存在文本和数字,建立cell元胞数组data{1,1} = '时间';data{1,2} = 'u10';data{1,3} = 'V10';data{1,4} = 'tp';data{1,5} = 'tcwv';%表头存入元胞数组第一行中for i = 1 : length(year_time)data(i+1,:) = {year_time(i,:) year_u10(k,i)' year_v10(k,i)' year_tp(k,i)' year_tcwv(k,i)'};q = point(k);r = point(3+k);endxlswrite(['I:\feng_liu_data\result\' 'point' '(' num2str(q) ',' num2str(r) ')' '.xlsx'],data)
end
六、提取结果
七、总结
静下心认真思考,相信你可以。
利用Matlab编程实现对NetCDF数据针对某一坐标按时间提取风、流、水蒸气等变量信息相关推荐
- ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类
ML之K-means:基于K-means算法利用电影数据集实现对top 100 电影进行文档分类 目录 输出结果 实现代码 输出结果 先看文档分类后的结果,一共得到五类电影: 实现代码 # -*- c ...
- matlab 进行非线性回归,5.利用Matlab编程进行非线性回归分析.doc
5.利用Matlab编程进行非线性回归分析.doc §5. 利用Matlab编程计算非线性回归模型 --以Logistic曲线为例 1.原始数据 下表给出了某地区1971-2000年的人口数据(表1) ...
- ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练、保存为pmml模型并重新载入pmml模型进而实现推理
ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练.保存为pmml模型并重新载入pmml模型进而实现推理 目录 基于nyoka库利用LGBMClassifi ...
- ML之DT:利用DT(DTC)实现对iris(鸢尾花)数据集进行分类并可视化DT结构
ML之DT:利用DT(DTC)实现对iris(鸢尾花)数据集进行分类并可视化DT结构 目录 输出结果 实现代码 输出结果 实现代码 #1. iris = load_iris() dir(iris)ir ...
- Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示
Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示 目录 输出结果 实现代码 输出结果 实现代码 %Brownian motion clf; n=20; s=0.02; x = rand ...
- ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类
ML之H-Clusters:基于H-Clusters算法利用电影数据集实现对top 100电影进行文档分类 目录 输出结果 实现代码 输出结果 先看输出结果 实现代码 # -*- coding: ut ...
- idft重建图像 matlab_利用 MATLAB 编程,打开一幅图像,对其进行 DFT 变换,并置其不同区域内的系数为零,进行 IDFT ,观察其输出效果。_学小易找答案...
[连线题]请对正确的快键键连线 [判断题]板书是指教师在课堂黑板或白板上书写,将教学内容形象.直观.简洁地传授给学生.清晰.流畅.快速的粉笔书写是课堂板书的基本功. [其它]利用 MATLAB 编程, ...
- 使用Python实现对excel数据的处理
前言 **使用Python实现对excel数据的处理, 预先知识简单介绍 xlrd中 # File_Path是Excel路径,打开Excel工作蒲 workbook = xlrd.open_workb ...
- 环形网络潮流计算matlab,利用matlab编程计算任意环形网络牛拉法潮流计算程序
环形网络潮流计算matlab,利用matlab编程计算任意环形网络牛拉法潮流计算程序,程序通用性强,通过修改参数可以得到任意节点和网络的环形网络牛拉法潮流计算. YID:696064261479453 ...
最新文章
- 计算机教师专业发展论文,关于教师专业发展的计算机专业论文
- 计算机组成原理中英对照篇,信息科学系课程介绍(中英对照).doc
- Bash shell脚本练习(一)
- WPF4.5 Cockbook - Chapter8(Style, Triggers and Control Template)
- mysql+美团点评_MySQL之安装美团点评的SQLAdvisor
- Java 高效编程之 Builder 模式
- 20145213《信息安全系统设计基础》第二周学习总结
- 236.Lowest Common Ancestor of a BinaryTree
- EF6.0新特性-DbCommandInterceptor实现非SQL端读写分离
- error: two or more data types in declaration specifiers原因及解决方法
- 【树上贪心】Tree with Small Distances【codeforces-Round #506-div3-E】
- 初学者想自学单片机需要买什么呢?
- Young不等式的一个新证明
- PPT里快速插入上下角标
- “夏栀的博客”网站一期建站通知贴
- String类题目methods总结
- 计算机显示器的标准是什么,电脑显示器的标准相位是多少啊
- 数模2019暑期培训Day1
- 分享md5解密站源代码,简单的代码就可以实现md5解密
- 线性代数——矩阵的秩
热门文章
- 设置标签位置:Excel图表学习记第13课
- CSS 设置字体大小用法介绍
- 日本語を勉強する日記 十八回目
- simulink降维观测器设计_基于MATLAB的状态观测器设计.doc
- simulink降维观测器设计_现代控制理论线性系统入门(九)设计状态观测器
- Excel多Sheet拆分与合并 - 亲测可用
- 6.18! 当当网推出购书优惠活动满400减230!有效优惠码更新
- mysql tpch_GitHub - staticor/tpch-mysql
- java 地图定位_利用百度地图进行定位
- 常用数据类型打印格式