爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: deeli

[其他] ncl 求特定时段标准差

[复制链接]
发表于 2014-2-27 23:00:18 | 显示全部楼层
本帖最后由 longlivehj 于 2014-2-27 23:06 编辑

:-),看来你的nc文件非常标准,应该很好用,那程序会更简单。
":="操作符目前不支持坐标变量,另外,如果olr的time坐标是double类型,可以直接设定cd_calender输出double类型。
olr&time = cd_calendar(olr&time, 2)
密码修改失败请联系微信:mofangbao
发表于 2014-2-27 23:05:50 | 显示全部楼层
deeli 发表于 2014-2-27 21:29
基础太不扎实了,百度了几篇ncl的手册,总感觉不够用,不知道前辈有没有什么ncl的教程,可否分享 ...

ncl官方网页上的资源最好,有web教程,pdf手册,ppt课件等等!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-3-1 15:20:00 | 显示全部楼层
longlivehj 发表于 2014-2-27 23:05
ncl官方网页上的资源最好,有web教程,pdf手册,ppt课件等等!

终于在前辈的耐心指导下,程序终于不报错啦~虽然写入文件的时候还有一点问题,嘿嘿,我自己先努力找错~谢谢前辈!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-3-2 21:38:21 | 显示全部楼层
deeli 发表于 2014-3-1 15:20
终于在前辈的耐心指导下,程序终于不报错啦~虽然写入文件的时候还有一点问题,嘿嘿,我自己先努 ...

前辈,不好意思,我又遇到问题了,就是
fout=addfile("olrstd.nc","c")
filedimdef(fout,"time",-1,True)
fout->olrstd=xstd(time|:,lat|:,lon|:)
这三个语句写入文件嘛,xstd变量是三维数组,可是每次写到文件里面,时间变量均为一维的,这个会是什么问题呢?我之前也用这三句写入过文件就没有问题~现在不管怎么弄时间维数都为1~~
密码修改失败请联系微信:mofangbao
发表于 2014-3-2 22:23:47 | 显示全部楼层
deeli 发表于 2014-3-2 21:38
前辈,不好意思,我又遇到问题了,就是
fout=addfile("olrstd.nc","c")
filedimdef(fout,"ti ...

这3行程序看上去没有什么问题。
xstd是三维没错,但能不能确定time维不是1呢?
把printVarSummary(xstd)的结果贴出来看看吧!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-3-2 22:54:22 | 显示全部楼层
两个图分别是这两个语句出来的
printVarSummary(xstd)
print(xstd(:,{0},{90}))   这句是为了确定每个时间维是不是都有值~
xx.jpg
xstd.jpg
密码修改失败请联系微信:mofangbao
发表于 2014-3-3 13:39:08 | 显示全部楼层
deeli 发表于 2014-3-2 22:54
两个图分别是这两个语句出来的
printVarSummary(xstd)
print(xstd(:,{0},{90}))   这句是为了确定每个时间 ...

问题解决了么?
这的确很奇怪。不要filedimdef那句,看看出来的文件time维还是1么?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-3-3 13:47:56 | 显示全部楼层
longlivehj 发表于 2014-3-3 13:39
问题解决了么?
这的确很奇怪。不要filedimdef那句,看看出来的文件time维还是1么?

不能算解决吧,我绕道而行了~,我原来看生成的nc文件,都是直接用grads打开的,用grads打开时间维数都是1,但是我后来发现,所有的维数的数据都已经写入了文件,所以,我又用NCL打开生成的数据,然后数据维数都是全的了~,真是奇怪,难道是grads不能识别我变量的time维?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-3-4 15:21:35 | 显示全部楼层
longlivehj 发表于 2014-2-26 16:20
另外,生成类似(/19740501, ..., 20131031/)数组可以用下面的方法:

julrange = greg2jul((/1974, 2013/ ...

前辈,我想用同样的思路提取上一年11月~下一年4月的数据,发现因为有2月在里面,数据没办法读到temp变量里面,2月又是比较特殊的一个月,难道说,我就只能提取28天或者将2月单独提取吗?
密码修改失败请联系微信:mofangbao
发表于 2014-3-4 15:48:49 | 显示全部楼层
deeli 发表于 2014-3-4 15:21
前辈,我想用同样的思路提取上一年11月~下一年4月的数据,发现因为有2月在里面,数据没办法读到temp变量里 ...

这就是为什么我在最早给你的示例程序里面有下面红色两句的原因。
olr2d!0 = "time"
olr2d&time = (/19740501, ..., 20131031/) % 10000
do y = 1974, 2013
    temp :=  olr1d({y * 10000 + 501 : y * 10000 + 1031})
    olr2d({temp&time % 10000}, y - 1974) = temp
end do

对于1974年而言,没有5月数据,所以temp的time坐标变量是(/19740601, ..., 19741031/),那么用{temp&time % 10000}去索引olr2d,就只会更新能够找到的坐标,即从6月开始更新,这就避免了if语句判断数据是否完整。

同样,对于你说的这种情况,只需要生成一个11月到4月长度的数组,其中2月按29天算,然后设置坐标变量time,读出的数据用坐标索引的方式更新就可以了。

不知道你能不能明白,反正我感觉描述起来比较费劲,o(∩∩)o...哈哈!
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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