- 积分
- 25333
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-3-17
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 斥鷃 于 2018-1-15 18:47 编辑
有关matlab数据转grads格点数据的函数,向大家分享一下,代码不是很复杂,中文注释,不过好处是自动生成和打开CTL文件。之前文件有一些小BUG,在一些版本的MATLAB里会出现维数不匹配的问题。现在重新改进了一下,另外由于新版本grads的特征,特别增加了ctl文件中env这个维数,大家平常不用到就算了,如果用到数据只需再加一维env即可。
附上小A等的帖子,作为很好的内容扩展,:要想细致了解函数具体操作,可以参考该贴:
Matlab处理后的数据写为二进制用于GrADS画图——fwrite函数使用
http://bbs.06climate.com/forum.php?mod=viewthread&tid=20308&fromuid=9098以及站点数据转换的函数@StephenTian
将数据转换为grads站点数据的函数
http://bbs.06climate.com/forum.p ... =45385&fromuid=9098MATLAB读取grads数据的函数
http://bbs.06climate.com/forum.p ... 19&fromuid=9098
以下是函数的help:- >> help gridform
- grads格点数据转换函数并生成CTL文件,函数形式:
- gridform(fid,...)
- fid为需要保存的dat数据文件位置(字符串),'...'内填写需要转换的变量,','隔开
- 其中变量要求必须为按经度、纬度、层次、时次顺序排列的四维变量,且各维维数信息要求相同
-
- 如果在要求ctl文件名处直接回车,则不生成ctl,生成ctl会要求获取CTL文件中变量名,运行结束后自动打开CTL文件,
- CTL文件默认设置了数据文件位置、标题、缺测数信息
- 须继续在文件中填写空间维数、时次和修改标题等信息
-
- 函数示例:
- gridform('D:\myitem\addtion\mytry\data.dat',uwnd,vwnd);
- >>please input the name of CTL file:D:\mytry.ctl
- >>input the variablename of NO.1:uwnd
- >>input the variablename of NO.2:vwnd
-
- 本例中,函数生成在D:\myitem\addtion\mytry的二进制文件data.dat
- 和D盘根目录下的CTL文件,文件中变量为uwnd和vwnd
复制代码
在这里简要说明一下变量必须设置为四维变量的意义:如果我们写入的CTL文件经纬是linear方式编排时,grads需要数据按照经纬度升序(由小到大)排列,即数据只能按照从西到东、从南到北写入二进制文件,所以我们在处理中必须将数据设置成这种形式,这里根据初始数据不同就有很多种方式了。
举个例子,比如我们处理的数据是:
| 97°E | 98°E | 99°E | 21°N | 20 | 22 | 21 | 22°N | 25 | 25 | 26 | 23°N | 30 | 31 | 30 |
则
我们的目标是把它变成(从西到东、从南到北):
| 21°N | 22°N | 23°N | 97°E | 20 | 25 | 30 | 98°E | 22 | 25 | 31 | 99°E | 21 | 26 | 30 |
很明显,用转置的方式就可以了。
如果初始矩阵是
| 97°E | 98°E | 99°E | 23°N | 30 | 31 | 30 | 22°N | 25 | 25 | 26 | 21°N | 20 | 22 | 21 |
则需要先用flipud(颠倒矩阵)结合转置进行处理得到上述矩阵。
由于matlab的reshape不能给最后几维为1的矩阵补维,所以更新了一下函数以处理这个bug,现在函数可以在使用中自动给最后几维补1处理了。例如直接放入Z为144*73的矩阵,函数会自动将其补维成[144 73 1 1 1]的矩阵。
|
评分
-
查看全部评分
|