1. 识别nc文件中的变量信息
M = ncinfo('文件名.nc');
M = ncinfo('C:\1Data\era5\2006-2016\201111\data.nc'); % 带绝对路径的
识别出来是这个样子:
Dimensions 就是维度,一般指 经度(lon)、纬度(lat)和时间(time)
Variables 就是变量,这里边有降水、气温、uv风速和那三个维度,共七个
2. 读取 nc 文件的变量
vardata = ncread(source,varname)
vardata = ncread(source,varname,start,count)
vardata = ncread(source,varname,start,count,stride)
source:你要读取的 nc 文件
varname:变量
start:读取维度的起始值,例如 [10 10 10] ,表示三个维度都从第10个开始读
count:读取的维度的长度,例如 [5 5 5],配合上行的start,表示三个维度都从第10个开始读,都读到第14个,即每个维度读 5 个
stride:读取变量的间隔值,例如[1 2 1],表示读取第一个维度的时候,变量序号之间相隔1(就是正常从头往后读取),第二个维度的时候,变量序号之间相隔2(就是隔一个读一个)
以上参考
Matlab—什么是nc文件,以及如何读取导入_会飞的羊YOUNG
3. 根据 nc 文件中的 lon 和 lat 绘制格网
[x,y]=meshgrid(lat,lon);
x =
1 2 3
1 2 3
1 2 3
y =
2 2 2
3 3 3
4 4 4
【matlab】函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法_Treysure
4. 读取 nc 文件 matlab
matlab 读取 era5 数据
%查看数据
M = ncinfo('200601.nc');
%读取数据
lon = ncread('200601.nc','longitude');
lat = ncread('200601.nc','latitude');
time = ncread('200601.nc','time');
tp = ncread('200601.nc','tp'); %要读取的变量
%转换时间格式
t0 = datetime(1900,1,1); %确定时间起始点
t = t0 + double(time(:))/24; %转换时间
t_str = string(t); %将时间从datetime转str
%输出经纬度、变量
r = 1;
data = zeros(length(lon)*length(lat)*length(time),3);
for i= 1 : length(lon)
for j = 1 : length(lat)
for k = 1 : length(time)
data(r,1) = lon(i); %在第一列写入经度
data(r,2) = lat(j); %在第二列写入纬度
data(r,3) = tp(i,j,k); %在第三列写入tp
r = r+1;
end
end
end
转载自:Matlab读取nc数据_哔哩哔哩_bilibili毛发浓密的猿工Matlab读取nc数据_哔哩哔哩_bilibili
matlab给出的为什么时间都是9000多的解释,因为时间单位无法当字符或数字写入,matlab字符串和时间不能写道同一个矩阵中
要从日期时间转换为数值,请首先减去起始日期时间,然后使用
SECONDS、MINUTES、HOURS、DAYS 或 YEARS 函数转换为数值。
1.4 读取 lon、lat 到 xls 文件
由于 arcgis 制作点集需要 xls 文件的经纬度,因此先将经纬度单独读到一个 xls 文件
使用如下代码将经纬度读取到 matlab 的工作表,然后复制到xls就可以了
cd C:\1Data\ERA5\exp
lon = ncread('200601.nc','longitude');
lat = ncread('200601.nc','latitude');
r = 1;
lon_lat = zeros(length(lon)*length(lat),2);
for i= 1 : length(lon)
for j = 1 : length(lat)
lon_lat(r,1) = lon(i);
lon_lat(r,2) = lat(j);
r = r+1;
end
end
era5的降水数据存在严重高估问题
同德县 force_35.2000_100.6000
era5数值:792 实际值:440
兰州 force_36.0000_103.4000
era5数值:565 实际值:327
太原 force_37.3000_112.6000
era5数值:1071 实际值:456
济南
era5数值:1133 实际值:1039