全球网格数据如grib、nc有些是按年组织的、有些是按月组织的、有些是按日组织的、有些是按小时组织的,然而这些在时间上都是一维形式,即普通的时间序列。
对于数值模式预报数据,如ECMWF、GRAPES、JMA、NCEP 等等,其数据在时间上是二维形式,即(起报时刻,超前序列)。举个简单例子,假设气象台对气温预报,星期一会预报星期二到星期五的气温,星期二会预测星期三到星期六的气温,星期三会预测星期四到星期日的气温,这里就可以看到,星期一到星期天产生的序列长度不是7,而是3 x 7 = 21,所以说预报数据是二维时间形式,这里的3就是起报时刻,7就是超前序列。
一般二维预报数据是按月组织的,比如在ECMWF官网下载的数据集,下载后解析可以看到时间是二维的,如下图:

一般读取这些网格数据用的是xarray,相比于netcdf4,xarray兼容grib和nc。使用xarray读取后,二维预报数据的维度(起报时刻,超前序列)会被解析为(time,step),比如下图中的time和step维度:

现在问题来了,有些全球网格的预报数据不是按月组织的,我想把它合成按月组织的怎么办?
例如中科院大气所的FGOALS模式,它是按天组织的,每天一个文件(一次预报),每次预报预测未来7天数据:


打开第一个文件,解析结果如上图右所示,发现是一维的预报数据,只有time维度,这与标准的二维预报数据不符。同时还发现,本来上图右的time维度应该是step,因为这是超前时间,超前7天,但由于是按天组织,退化成一维预报数据,导致用time维度替换了step维度。
所以一个大概合并流程要解决的问题包括:增加step维度,把原来的time维度替换成step维度,并将真正的起报时刻作为time维度。像什么xarray里的维度交换、更名等等操作全试了,都不行,因为这网格数据比想象的要复杂,它包含了坐标、索引等东西,这些东西是耦合的,所以不是交换维度、更名等操作能解决的。
下面给出一个个人的解决方案:
import numpy as np
import xarray as xr
import pandas as pd
def extract_all_e

最低0.47元/天 解锁文章
754

被折叠的 条评论
为什么被折叠?



