MATLAB:如何使用每小时数据计算每天的总降水量? (netcdf)
MATLAB: How to calculate total precipitation per day using hourly data ? (netcdf)
我有来自 ECMWF ERA5 的特定年份中每一天的每小时数据。我想将该数据从每小时转换为每天。哥白尼在这里有一个 Python 代码 https://confluence.ecmwf.int/display/CKB/ERA5%3A+How+to+calculate+daily+total+precipitation。
我想知道执行此操作的 matlab 代码是什么?我将 netcdf 文件上传到我的 google 驱动器中:
https://drive.google.com/open?id=1qm5AGj5zRC3ifD1_V-ne2nDT1ch_Khik
每天的时间步长是:
0:00
1:00
2:00
3:00
4:00
5:00
6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
通知以涵盖2017年1月1日的总降水量为例,我们需要两天的数据:
2017 年 1 月 1 日时间 = 01 - 23 将为您提供涵盖 00 - 23 UTC 的 2017 年 1 月 1 日的总降水量数据
2017 年 1 月 2 日时间 = 00 将为您提供涵盖 2017 年 1 月 1 日 23 - 24 UTC 的总降水量数据
这是 ncdisp():
>> ncdisp(filename)
Source:
C:\Users\Behzad\Desktop\download.nc
Format:
64bit
Global Attributes:
Conventions = 'CF-1.6'
history = '2019-11-01 07:36:15 GMT by grib_to_netcdf-2.14.0: /opt/ecmwf/eccodes/bin/grib_to_netcdf -o /cache/data6/adaptor.mars.internal-1572593007.3569295-19224-27-449cad76-bcd6-4cfa-9767-8a3c1219c0bb.nc /cache/tmp/449cad76-bcd6-4cfa-9767-8a3c1219c0bb-adaptor.mars.internal-1572593007.35751-19224-4-tmp.grib'
Dimensions:
longitude = 49
latitude = 41
time = 8760
Variables:
longitude
Size: 49x1
Dimensions: longitude
Datatype: single
Attributes:
units = 'degrees_east'
long_name = 'longitude'
latitude
Size: 41x1
Dimensions: latitude
Datatype: single
Attributes:
units = 'degrees_north'
long_name = 'latitude'
time
Size: 8760x1
Dimensions: time
Datatype: int32
Attributes:
units = 'hours since 1900-01-01 00:00:00.0'
long_name = 'time'
calendar = 'gregorian'
tp
Size: 49x41x8760
Dimensions: longitude,latitude,time
Datatype: int16
Attributes:
scale_factor = 3.0792e-07
add_offset = 0.010089
_FillValue = -32767
missing_value = -32767
units = 'm'
long_name = 'Total precipitation'
tp
是我的变量,它有 3 个维度 (lon*lat*time) = 49*41*8760
我想要 49*41*365
的平年。
结果应该是全年的每日值。
虽然可能存在一些矢量化版本可以将您的矢量重塑为 4 个维度,但一个简单的 for 循环就可以完成这项工作。
tp_daily=zeros(size(tp,1),size(tp,2),365);
for ii=0:364
day=tp(:,:,ii*24+1:(ii+1)*24); %grab an entire day
tp_daily(:,:,ii+1)=sum(day,3); % add the third dimension
end
我有来自 ECMWF ERA5 的特定年份中每一天的每小时数据。我想将该数据从每小时转换为每天。哥白尼在这里有一个 Python 代码 https://confluence.ecmwf.int/display/CKB/ERA5%3A+How+to+calculate+daily+total+precipitation。
我想知道执行此操作的 matlab 代码是什么?我将 netcdf 文件上传到我的 google 驱动器中:
https://drive.google.com/open?id=1qm5AGj5zRC3ifD1_V-ne2nDT1ch_Khik
每天的时间步长是:
0:00
1:00
2:00
3:00
4:00
5:00
6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
通知以涵盖2017年1月1日的总降水量为例,我们需要两天的数据: 2017 年 1 月 1 日时间 = 01 - 23 将为您提供涵盖 00 - 23 UTC 的 2017 年 1 月 1 日的总降水量数据 2017 年 1 月 2 日时间 = 00 将为您提供涵盖 2017 年 1 月 1 日 23 - 24 UTC 的总降水量数据 这是 ncdisp():
>> ncdisp(filename)
Source:
C:\Users\Behzad\Desktop\download.nc
Format:
64bit
Global Attributes:
Conventions = 'CF-1.6'
history = '2019-11-01 07:36:15 GMT by grib_to_netcdf-2.14.0: /opt/ecmwf/eccodes/bin/grib_to_netcdf -o /cache/data6/adaptor.mars.internal-1572593007.3569295-19224-27-449cad76-bcd6-4cfa-9767-8a3c1219c0bb.nc /cache/tmp/449cad76-bcd6-4cfa-9767-8a3c1219c0bb-adaptor.mars.internal-1572593007.35751-19224-4-tmp.grib'
Dimensions:
longitude = 49
latitude = 41
time = 8760
Variables:
longitude
Size: 49x1
Dimensions: longitude
Datatype: single
Attributes:
units = 'degrees_east'
long_name = 'longitude'
latitude
Size: 41x1
Dimensions: latitude
Datatype: single
Attributes:
units = 'degrees_north'
long_name = 'latitude'
time
Size: 8760x1
Dimensions: time
Datatype: int32
Attributes:
units = 'hours since 1900-01-01 00:00:00.0'
long_name = 'time'
calendar = 'gregorian'
tp
Size: 49x41x8760
Dimensions: longitude,latitude,time
Datatype: int16
Attributes:
scale_factor = 3.0792e-07
add_offset = 0.010089
_FillValue = -32767
missing_value = -32767
units = 'm'
long_name = 'Total precipitation'
tp
是我的变量,它有 3 个维度 (lon*lat*time) = 49*41*8760
我想要 49*41*365
的平年。
结果应该是全年的每日值。
虽然可能存在一些矢量化版本可以将您的矢量重塑为 4 个维度,但一个简单的 for 循环就可以完成这项工作。
tp_daily=zeros(size(tp,1),size(tp,2),365);
for ii=0:364
day=tp(:,:,ii*24+1:(ii+1)*24); %grab an entire day
tp_daily(:,:,ii+1)=sum(day,3); % add the third dimension
end