用Matlab对NC文件进行处理和分析杂谈(附数据集链接)

NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。

nc文件可以用很多软件读取,比如python、matlab、excel、java等。
如果想要直观的查看nc文件,笔者推荐下载panoply软件,这个软件可以对nc文件进行可视化显示,是nasa专门为nc文件开发的。
这里笔者使用Matlab进行处理,关于nc文件的数据格式和基本函数可以再matlab帮助文档中获取(点击此处转到帮助文档)
笔者想要分享在实际问题中所写的几个程序代码,这可能会给你带来一些启发和帮助。

下面说一下笔者遇到的问题,在进行2020年美赛A题竞赛过程中,笔者需要对未来50年的太平洋海表温度进行预测。于是笔者从北京大学地理数据平台获取了1844年到2018年每个月的各个经纬度下的海表面温度(SST),经纬度的间隔为2°数据集下载
为了得到每年的年均温度,笔者需要对数据进行聚集。为此笔者用matlab编写了一个函数,通过这个函数,输入经纬度和年份,可以得到该位置当年的年均SST。

function [ te ] = getNcData( lat,lon,year )
%lon经度0_358 lat纬度-88_88 year为年份
%返回值te为year年均温度
%在nc文件中,经度从上到下依次为0,2,4,6,8,...,358
%纬度依次为88,86,84,...,-88,通过经纬度可以得到温度
%获取经度的位置
lon_1=lon/2+1;
%获取维度的位置
if lat<0
    lat=abs(lat)+88;
end
lat_1=(88-lat)/2+1;
%受数据集形式限制,将年份换算成从1844年1月(数据起点)开始到year的月数
mon=(year-1854)*12+1;
startLoc=[lon_1  lat_1 mon];
count=[1 1 12];
%见上文文档连接
sstData = ncread('/Users/apple/Downloads/ERsst.mnmean.nc','sst',startLoc,count);
sstData=double(sstData);
te=mean(sstData,3);
end

这样,我们就可以获取任意年份任意经纬度上的温度了

发布了2 篇原创文章 · 获赞 5 · 访问量 138

猜你喜欢

转载自blog.csdn.net/C_P_J_M/article/details/104434414