爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9570|回复: 10

[作图] 如何把grib2 文件中 数据 复制给新建的数组

[复制链接]

新浪微博达人勋

发表于 2014-8-11 11:25:28 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
如何把grib2 文件中 数据 复制给新建的数组
数据描述:
float PWAT_P0_L200_GLL0 ( lat_0, lon_0 )
         center :       US National Weather Service - NCEP (WMC)
         production_status :    Operational products
         long_name :    Precipitable water
         units :        kg m-2
         _FillValue :   1e+20
         grid_type :    Latitude/longitude
         parameter_discipline_and_category :    Meteorological products, Moisture
         parameter_template_discipline_category_number :        ( 0, 0, 1, 3 )
         level_type :   Entire atmosphere (considered as a single layer)
         level :         0
         forecast_time :        0
         forecast_time_units :  hours
         initial_time : 04/11/2011 (00:00)
目的: 我现在有四个文件 都含有这个数据,我想把这一天不同时段的四个数据,想累这样就可以算出一天的降雨。
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
begin
;read the data
diri = "/home/liuzhe/fnl_data/"
fils = systemfunc("ls "+diri + "fnl_20110411*.grib2")
f = addfiles(fils,"r")
ListSetType(f ,"cat")
r = f[:]->PWAT_P0_L200_GLL0
n1 = dimsizes(r&lat_0)
n2 = dimsizes(r&lon_0)
rt = new((/1,n1 ,n2/),"float")
time1 = (/(/1/)/)
rt!0 = "time"
rt!1 = "lat"
rt!2 = "lon"
rt&time = time1
rt&lat = r&lat_0
rt&lon = r&lon_0
print(rt(0,40:100,40:100))
End
遇到的问题是,若直接对原来的r 进行操作 rain = dim_sum(r) ,这样就缺了了经度或者纬度,我就没法画图了,所以我想新建一个三维数组, rt(ntime , nlat ,nlon) ,然后我在用 dim_sum_n(rt) ,就可以保留经纬度 。但是遇到一个问题是print之后,rtr 的对应值不一样,发现该方法不能把r 中经纬度所对应的值(降雨量)传递给 rt中,这也就是我在想如何把一个数组所有的值或者元数据都传递给另外一个数组。

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 11:29:23 | 显示全部楼层
dim_sum_Wrap这个函数就返回元数据了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 11:55:12 | 显示全部楼层
沙发说的没错哦!
另外,根据你的描述,ListSetType用cat估计不行,要用join。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-11 15:36:45 | 显示全部楼层
尽头的尽头 发表于 2014-8-11 11:29
dim_sum_Wrap这个函数就返回元数据了

你好,我未验证dim_avg_n_Wrap 与 dim_avg_n 之间道理有什么区别,分别作了一下验证“
代码如下
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
begin
;read the data
diri = "/home/liuzhe/fnl_data/"
fils = systemfunc("ls "+diri + "fnl_20110411*.grib2")
f = addfiles(fils,"r")
ListSetType(f ,"cat")
u = f[:]->UGRD_P0_L100_GLL0
v = f[:]->VGRD_P0_L100_GLL0
r = f[:]->PWAT_P0_L200_GLL0
n1 = dimsizes(r&lat_0)
n2 = dimsizes(r&lon_0)
rt = new((/1,n1 ,n2/),"float")
time1 = (/(/1/)/)
rt!0 = "time"
rt!1 = "lat"
rt!2 = "lon"
rt&time = time1
rt&lat = r&lat_0
rt&lon = r&lon_0
r2= dim_avg_n_Wrap(r,1) 或者r2= dim_avg_n(r,1)
print(r2)
结果黑底是dim_avg_n_Wrap(r,1)的结果,另一个是r2= dim_avg_n(r,1)
这上传不了图片,就是输出结果并没有区别
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-11 15:37:39 | 显示全部楼层
longlivehj 发表于 2014-8-11 11:55
沙发说的没错哦!
另外,根据你的描述,ListSetType用cat估计不行,要用join。

师傅,我想验证dim_avg_n_Wrap 与 dim_avg_n 之间道理有什么区别,分别作了一下验证“
代码如下
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
begin
;read the data
diri = "/home/liuzhe/fnl_data/"
fils = systemfunc("ls "+diri + "fnl_20110411*.grib2")
f = addfiles(fils,"r")
ListSetType(f ,"cat")
u = f[:]->UGRD_P0_L100_GLL0
v = f[:]->VGRD_P0_L100_GLL0
r = f[:]->PWAT_P0_L200_GLL0
n1 = dimsizes(r&lat_0)
n2 = dimsizes(r&lon_0)
rt = new((/1,n1 ,n2/),"float")
time1 = (/(/1/)/)
rt!0 = "time"
rt!1 = "lat"
rt!2 = "lon"
rt&time = time1
rt&lat = r&lat_0
rt&lon = r&lon_0
r2= dim_avg_n_Wrap(r,1) 或者r2= dim_avg_n(r,1)
print(r2)
结果黑底是dim_avg_n_Wrap(r,1)的结果,另一个是r2= dim_avg_n(r,1)
这上传不了图片,就是输出结果并没有区别,这是什么原因?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 15:48:05 | 显示全部楼层
刘哲 发表于 2014-8-11 15:37
师傅,我想验证dim_avg_n_Wrap 与 dim_avg_n 之间道理有什么区别,分别作了一下验证“
代码如下
load " ...

咋不能上传图片呢?
区别肯定有的,print时不要只注意后面的数据部分,变量的基本信息部分应该是有差异的。用printVarSummay就可以看出来了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 16:05:35 | 显示全部楼层
刘哲 发表于 2014-8-11 15:36
你好,我未验证dim_avg_n_Wrap 与 dim_avg_n 之间道理有什么区别,分别作了一下验证“
代码如下
load " ...

区别应该就是一个返回元数据,一个不返回
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-11 16:08:22 | 显示全部楼层
尽头的尽头 发表于 2014-8-11 16:05
区别应该就是一个返回元数据,一个不返回

首先元数据到底是什么?是数组所对应的值吗?要是的话,print输出的结果并没有区别!这是什么原因,我是一个新手,您多指教
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 16:22:24 | 显示全部楼层
刘哲 发表于 2014-8-11 16:08
首先元数据到底是什么?是数组所对应的值吗?要是的话,print输出的结果并没有区别!这是什么原因,我是 ...

longlivehj说了哇,用printVarSummay就可以看出来了
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-11 16:34:28 | 显示全部楼层
本帖最后由 longlivehj 于 2014-8-11 16:36 编辑
刘哲 发表于 2014-8-11 16:08
首先元数据到底是什么?是数组所对应的值吗?要是的话,print输出的结果并没有区别!这是什么原因,我是 ...

http://bbs.06climate.com/forum.p ... 7459&extra=page%3D1
在上面的帖子里,建议楼主去百度下“元数据”的,没有做啊?

元数据就是一切描述数据的数据。就如没有说明书的药,是不敢吃的,没有元数据的数据,是没法用的。在ncl里面,变量的元数据包括属性、坐标数据等。你贴出的PWAT_P0_L200_GLL0描述,就属于这个变量的元数据。

ncl中带Wrap的函数在对变量数据进行处理后,会把原变量的元数据也一并传给新变量。因此,楼主一再说的两者没有区别其实只注意了数据部分。元数据出现在print的开头,用printVarSummary能更方便的看到。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表