爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 10237|回复: 9

eof不出结果

[复制链接]

新浪微博达人勋

发表于 2021-4-2 23:42:37 | 显示全部楼层 |阅读模式
NCL
系统平台: NCL
问题截图:
问题概况: 用eof做全球海温,但是ncl停在这个界面就不往下了,也不报错。
我怀疑是由于我使用的HadISST数据精度太高,1°x1°,统计时间又有70年,空间点太多就画不出来。但我跳着读数,空间点少一半,仍然出不来。
想知道有人遇过类似问题吗,或是怎么把数据的分辨率变低一点?
我看过提问的智慧: 看过
自己思考时长(天): 1

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

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

x

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

新浪微博达人勋

 楼主| 发表于 2021-4-7 16:57:37 | 显示全部楼层
bieq 发表于 2021-4-7 16:53
已解决,主要是程序有问题

成功运行的程序如下:

begin         
f        = addfile("HadISST_sst.nc","r")
timeARR = cd_calendar(f->time,-5)
yrARR = timeARR(:,0)
timeIND = ind(yrARR.ge.1949 .and. yrARR.le.2019);IND948:1799
yrst = yrARR(timeIND);1949-2019,每个storm的年份
year = ispan(1949,2019,1)

sst0 = f->sst(timeIND,:,:) ; [time|852]x[latitude|180]x[longitude|360]
sstd = where(sst0.eq.-1000,sst0@_FillValue,sst0) ;min=-1.8   max=35.2085
copy_VarCoords(sst0,sstd)
m=dimsizes(sst0&latitude)
n=dimsizes(sst0&longitude)
sstdd = new((/71,m,n/),float)
do i=0,70 ;将一年的12个月做平均
term = 1949+i
tInd = ind(yrst.eq.term)
sstdd(i,:,:) = dim_avg_n_Wrap(sstd(tInd,:,:),0)
delete(tInd)
end do
sstAnom = dtrend_msg_n(year,sstdd,True,False,0)
                                  ;(包含sstdd第0维坐标的一维数组,去趋势的变量,是否去除均值,是否传回y的斜率截距att,去趋势的维)
copy_VarCoords(sstdd,sstAnom)
sstAnom!0 = "time" ;rmvmean函数需要变量有维名
;=======EOF分析===========
optEOF             = True
optEOF@jopt = 0 ;1表示用相关矩阵计算EOFs,0表示用协方差矩阵计算(默认)

; 得到 EOF 模态
eof                = eofunc_n_Wrap(sstAnom,10,optEOF,0) ;计算前10个模态;第四个参数dim,表示除dim维,其他维均参与EOF
; 投影得到主分量
pc                 = eofunc_ts_n_Wrap(sstAnom,eof,0,0) ;时间序列,第2,3个变量为optEOF,dim

; 提取 EOF1 模态
eofPlot                = eof(0,:,:) ; 经过标准化
eofPlot         = (/eofPlot*sqrt(eof@eval(0))/) ;去标准化,数值大小与原data一样,对应的时间系数除以相应特征值的开方
                                               ;标准后数值非原data,只能分析分布型,因此乘上相应特征值的开方去标准化

; 提取 PC1 的时间序列
pcPlot                 = dim_standardize(pc(0,:),0) ;[852]无缺省
;=======画图==================
wks = gsn_open_wks("png","eof")
res                      = True
res@gsnDraw              = False        ; don't draw yet
res@gsnFrame             = False        ; don't advance frame yet
res@gsnMaximize             = False
;res@gsnAddCyclic         = True        ; 预设
res@vpWidthF = 0.7
res@vpHeightF = 0.6

res@mpCenterLonF         = -150.         ; defailt is 0 [GM]
;res@mpMinLatF            = min(x&latitude)
;res@mpMaxLatF            = max(x&latitude)
;res@mpMinLonF            = min(x&longitude)
;res@mpMaxLonF            = max(x&longitude)
res@mpFillOn = True
res@mpLandFillColor = "grey"
res@mpOutlineOn = True

res@cnFillOn             = True         ; turn on color fill
res@cnLinesOn            = False         ; True is default
res@cnLineLabelsOn       = False
res@cnFillPalette        = "BlueWhiteOrangeRed"
res@cnInfoLabelOn = False
res@lbBoxEndCapStyle     = "TriangleBothEnds"
;res@pmLabelBarOrthogonalPosF = 0.15

res@lbLabelBarOn         = True   
res@cnInfoLabelOn = False

res@cnLevelSelectionMode = "ExplicitLevels"
res@cnFillColors = (/2,29,49,81,108,161,180,209,245/)  ;颜色比数值多一个
res@cnLevels     = (/-0.6,-0.5,-0.3,-0.1,0,0.1,0.2,0.3/)

res@tiMainString          = "EOF1, " + sprintf("%.2f",eof@pcvar(0)) + "%"

res@tiMainFontHeightF  = 0.026
res@lbLabelFontHeightF = 0.018

;=======pcPlot===============
resPC                                 = True
resPC@gsnDraw                 = False
resPC@gsnFrame             = False
resPC@gsnMaximize   = False
resPC@vpWidthF = 0.7
resPC@vpHeightF = 0.3
;resPC@vpXF = .12

resPC@gsnCenterString = "PC1"
resPC@trXMinF                        = 1949
resPC@trXMaxF                         = 2019
resPC@trYMinF   = -3.0     
resPC@trYMaxF   =  3.0

resPC@xyMarkLineMode = "Lines"

resPC@gsnXYBarChart                = True
resPC@gsnYRefLine                 = 0.
resPC@gsnAboveYRefLineBarColors         = "red"
resPC@gsnBelowYRefLineBarColors         = "blue"

resPC@gsnCenterStringFontHeightF = 0.028

; panel plot only resources
resP                     = True      
resP@gsnMaximize         = True         
;resP@gsnPanelXWhiteSpacePercent         = 2.5
resP@gsnPanelYWhiteSpacePercent         = 0.2
plot = new(2,graphic)           
plot(0) = gsn_csm_contour_map_ce(wks,eofPlot,res)
plot(1) = gsn_csm_xy(wks,year,pcPlot,resPC)

gsn_panel(wks,plot,(/2,1/),resP)   

end
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-2 23:45:21 | 显示全部楼层

                               
登录/注册后可看大图

这是一个参考文献中的全球海温图,看起来分辨率不高,也是HadISST数据,但文中说分析的是2°x2°,不知道读数据的时候是不是我猜想的跳着读
sst.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-2 23:52:22 | 显示全部楼层
本帖最后由 bieq 于 2021-4-3 10:57 编辑

为什么不能删帖,发错了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-3 00:01:11 | 显示全部楼层
本帖最后由 bieq 于 2021-4-7 16:58 编辑

错误程序已删
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-3 02:02:46 | 显示全部楼层
EOF运行速度太慢了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-3 11:02:55 | 显示全部楼层
本帖最后由 bieq 于 2021-4-4 10:48 编辑
bieq 发表于 2021-4-3 00:01
顺便贴上我的ncl程序,参考了论坛内的帖子和网上相关
程序里有我絮絮叨叨的注解,就不删了,自己本身也是 ...

发现程序里对sst的处理有问题,画图也有问题。。。程序还是参考站内这个大佬的吧
http://bbs.06climate.com/forum.p ... ad&page=1&tid=20990
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-3 11:05:29 | 显示全部楼层
Lancelot 发表于 2021-4-3 02:02
EOF运行速度太慢了

那请问能提高运行速度吗,几个小时都不出结果,是不是说明超过ncl能处理的范围,真出不来了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-4 14:43:37 | 显示全部楼层
bieq 发表于 2021-4-3 11:05
那请问能提高运行速度吗,几个小时都不出结果,是不是说明超过ncl能处理的范围,真出不来了{:eb ...

不能,多等一会就出来了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-4-7 16:53:44 | 显示全部楼层
已解决,主要是程序有问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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