千家信息网

NCL常用统计学函数怎么用

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,这篇文章主要介绍"NCL常用统计学函数怎么用",在日常操作中,相信很多人在NCL常用统计学函数怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"NCL常用统计学函数怎
千家信息网最后更新 2025年02月04日NCL常用统计学函数怎么用

这篇文章主要介绍"NCL常用统计学函数怎么用",在日常操作中,相信很多人在NCL常用统计学函数怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"NCL常用统计学函数怎么用"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

NCL作为一门气象专业语言,自带了很多气象届常用的算法和命令, 比如计算相关系数、均方根误差等统计量,相关系数显著性检验,EOF,以及各种插值。这里将一些常用函数做了归纳:

1、相关系数
NCL中计算相关系数的函数有好几个,常用的为escorc系列和regCoef系列。

escorc(x,y)是计算两个数组最右侧一列的相关系数。如果想指定计算的列数,比如想计算x(lat,lon)和y(lat,lon,year)在lat这一列上的相关系数,就要用到escorc_n: escorc_n(x,y,0)。

相关系数的检验方法包括t检验、f检验和显著性检验,分别为ttest,ftest,rtest。

regCoef系列的命令比escorc强大很多,因为它除了返回相关系数rc,还捎带手把两个序列的标准差(rc@rstd)和t检验结果(rc@tval)都给算了。

2、均方根误差
函数名为dim_rmsd。它是计算两个变量在所有其他维度上最右侧维度的均方根误差。而对于想要计算指定维度的情况,则要用dim_rmsd_n。

3、EOF分解
计算EOF分解的函数为eofunc开头的系列函数,一般用eofunc_Wrap计算空间模态,用eofunc_ts_Wrap计算时间系数。

以下为针对变量x计算EOF分解并绘图的NCL子程序:

undef("draw_eof_plot")procedure draw_eof_plot(dir_plot,file_plot,type_plot,x,year,neof)begin;--EOF analysisoptEof = Trueeof    = eofunc_Wrap( x, neof, optEof)eof_ts = eofunc_ts_Wrap( x, eof, False)lat = x&latlon = x&lon;--Begin plotting section.wks  = gsn_open_wks(type_plot,dir_plot+file_plot)      ; Opens a ps file gsn_define_colormap(wks,"rainbow")   plot = new(neof,graphic)   res              = True                       ; plot mods desired;************************************************; original data;************************************************   res@gsnDraw                    = False        ; don't draw yet   res@gsnFrame                   = False        ; don't advance frame yet   res@gsnAddCyclic             = False;--map plot resources  res@mpFillOn                   = False        ; no grey continents  res@mpCenterLonF      = 180.  res@mpDataBaseVersion     = "MediumRes"    ; or "Ncarg4_1"  res@mpDataSetName="Earth..4"  res@mpOutlineSpecifiers=(/"China:states","Taiwan"/)  res@mpOutlineBoundarySets = "AllBoundaries"  res@mpMinLatF  = min(lat)            ; range to zoom in on  res@mpMaxLatF  = max(lat)  res@mpMinLonF  = min(lon)  res@mpMaxLonF  = max(lon)
;--contour resources res@cnFillOn = True ; turn on contour fill res@cnLineLabelsOn = False ; turn off contour res@cnLinesOn = False ; add countor or not,True is default res@gsnLeftString = " " res@gsnRightString = " "
;--tickmark resources res@tmXTOn = False res@tmYROn = False res@tmYLLabelFontHeightF =0.02 res@tmXBLabelFontHeightF =0.018 res@tmXTOn = False res@tmYROn = False
;--labelbar resources res@lbLabelBarOn = False res@lbLabelFontHeightF = 0.02 res@lbOrientation = "Vertical" ; vertical label bar
symMinMaxPlt(eof, 16, False, res); contributed.ncl; panel plot only resources resP = True ; modify the panel plot resP@gsnMaximize = True ; large format resP@gsnPanelLabelBar = True ; add common colorbar resP@txString = "EOF"do n=0,neof-1 res@gsnLeftString = " EOF "+(n+1) res@gsnRightString = sprintf("%5.1f", eof@pcvar(n)) +"%" plot(n) = gsn_csm_contour_map(wks,eof(n,:,:),res)end do gsn_panel(wks,plot,(/neof/1,2/),resP) ; draw all 'neof' as one plot;*******************************************; time series (principal component) plot;******************************************* eof_ts@long_name = "Amplitude" rts = True rts@gsnDraw = False ; don't draw yet rts@gsnFrame = False ; don't advance frame yet
; decide exactly where on the page to draw it. rts@vpHeightF = 0.40 ; Changes the aspect ratio rts@vpWidthF = 0.85 rts@vpXF = 0.10 ; change start locations rts@vpYF = 0.75 ; the plot rts@gsnYRefLine = 0. ; reference line rts@gsnAboveYRefLineColor = "red" ; above ref line fill red rts@gsnBelowYRefLineColor = "blue" ; below ref line fill blue; panel plot only resources rtsP = True ; modify the panel plot rtsP@gsnMaximize = True ; large format rtsP@txString = "EOF" do n=0,neof-1 rts@gsnLeftString = " EOF "+(n+1) rts@gsnRightString = sprintf("%5.1f", eof@pcvar(n)) +"%" plot(n) = gsn_csm_xy (wks,year,eof_ts(n,:),rts) end do gsn_panel(wks,plot,(/neof/1,2/),rtsP) ; draw all 'neof' as one plotend

到此,关于"NCL常用统计学函数怎么用"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0