爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 23636|回复: 7

ncl批量处理数据

[复制链接]

新浪微博达人勋

发表于 2014-5-10 11:34:25 | 显示全部楼层 |阅读模式
NCL
系统平台:
问题截图: -
问题概况: ncl批量处理数据的问题困扰我很久了
我看过提问的智慧: 看过
自己思考时长(天): 2

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

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

x
以下是我每次导入一个数据然后算出三个变量对某一个区域的平均值:
begin
f  = addfile("./month/12.nc","r")         ; 有1-12个数据
lat= f->lat
lon= f->lon
dstsfdry = f->dry
dstsfwet = f->wet
dstsfmbl = f->mbl
printVarSummary(dstsfmbl)
wgty=latRegWgt(lat, "double", 0)
MBL = wgt_areaave(dstsfmbl({28:62},{240:302}), wgty({28:62}), 1.0, 0)
DRY = wgt_areaave(dstsfdry({28:62},{240:302}), wgty({28:62}), 1.0, 0)
WET = wgt_areaave(dstsfwet({28:62},{240:302}), wgty({28:62}), 1.0, 0)
;printVarSummary(MBL)
print(MBL)
print(DRY)
print(WET)
end
总共是12个月份的数据,每次屏幕输出3各变量名,然后我再手动输入到oringin里面画月变化的图。
有没有循环语句,可以把3个变量存到3个txt文件里,每个文件有12个月的数据。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-11 15:55:10 | 显示全部楼层
begin
    filepath = systemfunc("ls ./month/*.nc", "r")
   f  = addfiles(filepath,"r")
    ListSetType(f, "join")
    lat= f[0]->lat
   dstsfdry = f[:]->dry
   dstsfwet = f[:]->wet
   dstsfmbl = f[:]->mbl
    wgty=latRegWgt(lat, "double", 0)
   MBL = wgt_areaave(dstsfmbl(:, {28:62},{240:302}), wgty({28:62}), 1.0, 0)
   DRY = wgt_areaave(dstsfdry(:, {28:62},{240:302}), wgty({28:62}), 1.0, 0)
   WET = wgt_areaave(dstsfwet(:, {28:62},{240:302}), wgty({28:62}), 1.0, 0)
    asciiwrite("MBL.txt", MBL)
    asciiwrite("DRY.txt", DRY)
    asciiwrite("WET.txt", WET)
end
密码修改失败请联系微信:mofangbao
回复 支持 4 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-14 11:49:48 | 显示全部楼层
本帖最后由 longlivehj 于 2014-5-14 11:54 编辑
chongzika 发表于 2014-5-14 11:30
DSTSFwet=new((/96,144/),float)
DSTSFwet=dim_avg_n_Wrap(dstsfwet,0);dstswet是join进来的是4维变量 ...

addfiles返回的是一个list类型的变量,而这种变量的读取有两种方式,分别是“join”和“cat”,后者为默认,使用ListSetType进行切换。
cat方式将所有文件中变量在最左边的维上进行合并处理,join方式则在最左边额外产生一维,大小为文件数。

dstsfwet是用join方式读出的,也就是说,它比DSTSFwet要多出一维,位于最左边。那么,dim_avg_n_Wrap对dstsfwet第一维(也就是最左边的维)求平均后,第一维自然消失,变为和DSTSFwet维数信息一致。弄清楚这个问题后,其它问题相信你也能想明白。

你所有的疑问实际上在addfiles和ListSetType的帮助里面都能找到答案,建议仔细阅读帮助,多看示例代码。
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2014-5-10 22:52:19 | 显示全部楼层
你可以一下把十二个文件都读入,或者循环读入。申请三个12的维数组,一个变量的就都放到一个数组里。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-11 20:25:54 | 显示全部楼层
longlivehj 发表于 2014-5-11 15:55
begin
    filepath = systemfunc("ls ./month/*.nc", "r")
   f  = addfiles(filepath,"r")

很感谢,回头来试试
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-13 09:48:57 | 显示全部楼层
本帖最后由 chongzika 于 2014-5-13 14:25 编辑
longlivehj 发表于 2014-5-11 15:55
begin
    filepath = systemfunc("ls ./month/*.nc", "r")
   f  = addfiles(filepath,"r")

比如我有20年的数据,每个月一个数据,总共240个数据,我要对月份和年份分别求平均,在保存到nc文件中,应该怎么批处理呢
需要写循环么?我每次都是这样一点点改的:而且每次处理后时间维就没有了,怎么可以保留呢,是不是读入时多加1维就可以呢。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-5-13 10:17:13 | 显示全部楼层
chongzika 发表于 2014-5-13 09:48
比如我有20年的数据,每个月一个数据,总共240个数据,我要对月份和年份分别求平均,在保存到nc文件中, ...

文件路径可以不用systemfuc,而通过程序来构造;
时间维消失是因为你没有加入ListSetType(f, "join"),我给你的示例代码里有的;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-14 11:30:00 | 显示全部楼层
longlivehj 发表于 2014-5-13 10:17
文件路径可以不用systemfuc,而通过程序来构造;
时间维消失是因为你没有加入ListSetType(f, "join"), ...

DSTSFwet=new((/96,144/),float)
DSTSFwet=dim_avg_n_Wrap(dstsfwet,0);dstswet是join进来的是4维变量,是不是有一维不起作用呢?这样左右是相等的。
DSTSFwet=new((/12,96,144/),float)这样就会提示不相等,
DST=new((/12,30,96,144/),float)
DST=dst01+dst02+dst03+dst04;这个变量dst01/02/03/04是5维的变量怎么在付给一个思维的变量呢,现在加进来的维数好像是起作用的吧?jion来的维数到底是个什么情况呢?


密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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