CMORPH数据处理2 (请见3 此篇繁琐)

采用数据是v1.0 BLD(融合站点的)daily数据,分辨率是0.25*0.25.数据说明和下载网址见前一篇博客。

CMORPH的官方文档暂时没有找到很详细的说明。

发现很多人对这个数据的处理都存在疑问,参考了论坛和官网,记录下来供大家参考。欢迎提出更好的思路。


首先数据是以二进制字符计录的,4byte float32,这个很重要,找了很久才找到。二进制文件需要转换成能看的数字。文档的readme暂时没发现太多干货,直接打开CTL文件。

http://ftp.cpc.ncep.noaa.gov/precip/CMORPH_V1.0/BLD/0.25deg-DLY_EOD/GLB/  找到CTL并打开。CTL文件是Grads常用的一个文件,具体内容是这样:

这个文件记录了一些基本的信息,类似于头文件。

需要重点看的是XDEF和YDEF分别对应的起点和步长,(注意点是位于格网中心的)。x是从0.125度开始的,那么一直会加到359.875度,(也就是西经的179.875度)共1440个点。y是从-89.5开始的,那么会一直到89.875度,共720个点。

引用CSDN一篇关于Grads的博客:https://blog.csdn.net/chht/article/details/5255962  写了一些关于CTL文件的介绍

本例子数据是从左到右,从上到下排列的。读出来是shape是:正好等于1440*720。

一共是1036800行,那么数据是怎么排列的呢?如何把数据转换成1440*720的矩阵?

按照CTL文件给的顺序:应该是从左到右,从上到下依次排列。

用matlab或者python等软件的reshae功能,把矩阵reshape为1440*720的矩阵。但是reshape后注意上下翻转一次,因为一共1036800行,reshape后会默认从上到下排,而CTL文件给的是从下到上排列。python代码如下,供大家参考。后续如何处理请见下一篇博客。

import numpy as np
file = 'F:/mytest/tCMORPH_V1.0BETA_BLD_0.25deg-DLY_EOD_19980101'  # 文件路径
with open(file, 'rb') as f:              # 用with open 打开文件更智能
    a = np.fromfile(f, dtype=np.float32)   # 把二进制文件转为可读的数字
a = np.reshape(a, (1440,720))           # rashape
a = a[::-1]                            # 翻转矩阵
  

猜你喜欢

转载自blog.csdn.net/hengcall/article/details/81749594