爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: 我是小猪

[其他] NCL脚本利用站点资料做EOF分析

[复制链接]
发表于 2017-6-8 17:44:05 | 显示全部楼层
我也遇见了和你一样的问题诶!你最后怎么解决的?
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-6-10 22:34:55 | 显示全部楼层
小宝19950118 发表于 2017-6-8 17:44
我也遇见了和你一样的问题诶!你最后怎么解决的?

楼上有说要把六个变量放在一起弄,不过我最近忙着复习考试暂时还没搞,等我考完试我试试看看
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2017-6-10 22:37:45 | 显示全部楼层
我是小猪 发表于 2017-6-10 22:34
楼上有说要把六个变量放在一起弄,不过我最近忙着复习考试暂时还没搞,等我考完试我试试看看

啊啊,回复错了,我当时这个问题现在看来还是太简单了,这就是个未定义的问题,建议你仔细再看看程序是否有变量未定义即可,不然你发来咱们讨论也可以
密码修改失败请联系微信:mofangbao
发表于 2017-6-11 10:34:29 | 显示全部楼层
谢谢~后来解决了~是函数用错了加上参数没有定义的问题
密码修改失败请联系微信:mofangbao
发表于 2018-4-14 22:13:25 | 显示全部楼层
我是小猪 发表于 2017-4-27 13:00
例子是不需要插值的,不过过来快一年了我再回来看当初发的这个程序,太粗糙了,哈哈,当时还是太年轻,我 ...

楼主!!!我想问问你后来重做的结果怎么样?我也想用ncL做站点的EOF分析,所以想看参考一下楼主正确做法的流程,哈哈哈,谢谢楼主~盼复。
密码修改失败请联系微信:mofangbao
发表于 2018-6-12 10:47:01 | 显示全部楼层
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
Undefined identifier: (eofunc_north) is undefined, can't continue
楼主,我已经加载库了,但是用这个检验特征值是否显著分离的函数还是会出现上面的错误,求指教
密码修改失败请联系微信:mofangbao
发表于 2018-10-18 09:52:37 | 显示全部楼层
小猪,最后做出来了吗?最近在学习站点eof,求指教
密码修改失败请联系微信:mofangbao
发表于 2019-4-7 21:42:37 | 显示全部楼层
楼主你好,我用1L第一段程序运行150个格点54年的数据为什么会出现这种错呀?该怎么修改呢?
错误:
Error! EOF routine called requesting more
modes than exist!  Request=         150  exist=          54
STOP eof


程序:
; ==============================================================
; eof_0a.ncl
; Concepts illustrated:
;   - Reading a simple ascii file
;   - Pretty printing
;   - Rearranging data order via named dimension     
;   - Weighting the data
;   - Calculating EOFs and Principal Components (ie: time series)
;   - Reconstructing the original array from EOFs and PCsby unweighting
;   - Calculating 'sum-of-square' to verify normalization
;   - Calculating cross correlations to verify that each is zero.
;     This verifies that they are orthogonal.
; =============================================================
; John C Davis
; Statistics and Data Analysis in Geology
; Wiley, 2nd Edition, 1986
; Source Data: page 524 , EOF results: page537
; =============================================================
; Cosine  weighting is performed
; =============================================================
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" ; not needed after 6.0.0
begin
; ================================>  ; PARAMETERS
  ncol   = 150;7                           ; # columns (stations or grid points)
  nrow   = 54;25                          ; # time steps   
  neval  = 150;7                           ; # EOFs to calculate (max=ncol)
  xmsg   = -999.9                      ; missing value (_FillValue)

  ntim   = nrow                        ; # time steps   
  nsta   = ncol                        ; #  这啥??
; ================================>  ; READ THE ASCII FILE
  fname  = "D:\NCL\cygwin\home\Administrator\out5.txt"        ; test data from Davis text book
                                       ; open "data " as 2-dim array
  data   = asciiread (fname,(/ntim,nsta/), "float")
  data!0 = "time"                      ; name the dimensions for subsequent use
  data!1 = "sta"
  data@_FillValue = xmsg

; ================================>   ; CREATE BOGUS LATITUDES & COSINE WEIGHTING创建伪纬度和余弦加权
;  sta    = ispan(-60, 60, 20)*1.0   ;
;  lat!0  = "lat"
;  lat@units = "degrees_north"
;  data&lat  =  lat
;  printVarSummary(lat)

;  clat   = sqrt(cos(lat*0.01745329))  ; [*]; cosine weighting   

; ================================>   ; PRETTY PRINT INPUT DATA

  opt = True
  opt@tspace = 5
  opt@title  = "Davis Input Data"
  write_matrix (data, (nsta+"f9.3"), opt);

; ================================>   ; REORDER TO WHAT EOFUNC EXPECTS

  x        = data(sta | :,time | :)   ; reorder ... eofunc want 'time' as rightmost dimension
  printVarSummary(x)
  print("")

;  CSTA     = conform(x, csta, 0)      ; create explicit array (not needed; done for illustration)
;  printVarSummary(CSTA)
;  print("")

; ================================>   ; REORDER TO WHAT EOFUNC EXPECTS

;  xw       = x*CSTA                   ; weight the observations; xw -> weighted
;  copy_VarCoords(x, xw)
;  printVarSummary(xw)
;  print("")

; ================================>   ; EOFs on weighted observationsS

  evecv    = eofunc_Wrap    (x,neval,False);eofunc_Wrap(x,eof,optETS)
  evecv_ts = eofunc_ts_Wrap (x,evecv,False);             !!!!!!!!!!!!就是这两句这儿老报错!!!!!!!!!!!

  print("")
  printVarSummary(evecv)
  print("")
  printVarSummary(evecv_ts)
  print("")

; ================================>   ; PRETTY PRINT OUTPUT EOF RESULTS

  opt@title  = "Eigenvector components from weighted values: evecv"
  write_matrix (evecv(sta|:,evn|:), (nlat+"f9.3"), opt) ; reorder to match book
  print("")

  opt@title  = "Eigenvector time series from weighted values: evecv_ts"
  write_matrix (evecv_ts(time|:,evn|:), (nsta+"f9.3"), opt)
  print(" ")

  print("evecv_ts@ts_mean="+evecv_ts@ts_mean)
  print(" ")

; ================================>   ; SUM OF THE SQUARES
                                      ; IF NORMALIZED, THEY SHOULD BE 1
  sumsqr = dim_sum(evecv^2)
  print("sum of squares: " + sumsqr)
  print(" ")

; ================================>   ; RECONSTRUCT DATA:
                                      ; NCL WORKS ON ANOMALIES
  do n=0,neval-1                        
     evecv_ts(n,:) = evecv_ts(n,:) + evecv_ts@ts_mean(n)  ; add weighted means   
  end do                 

  xRecon = eof2data (evecv,evecv_ts)  ; RECONSTRUCTED WEIGHTED DATA
  copy_VarCoords(x, xRecon)

  xRecon = xRecon/CSTA

  printVarSummary(xRecon)
  print(" ")

  opt@title  = "Reconstructed data via NCL: default mode: constant offset"
  write_matrix (xRecon(time|:,sta|:), (nsta+"f9.3"), opt)
  print(" ")

; ================================>   ; MAX ABSOLUTE DIFFERENCE

  mxDiff     = max(abs(xRecon-x))
  print("mxDiff="+mxDiff)
  print(" ")

; ================================>   ; ORTHOGONALITY: DOT PRODUCT
                                      ; 0=>orthogonal
  do ne=0,neval-1
     EVECV = conform(evecv, evecv(ne,:), 1 )

     print("=====> dotp for col "+ne+"  <=====")
    do nn = 0, neval - 1
     dotp = dim_sum(evecv*EVECV)
     print("dotp patterns: " + dotp)
     print(" ")
    end do
  end do

; ================================>   ; CORRESTAION

  do ne = 0, neval - 1
     corr = escorc(evecv_ts(ne,:),evecv_ts)
     print("corr patterns: " + corr)
     print(" ")
  end do

end

150个站点54年

150个站点54年
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2019-4-9 14:54:42 | 显示全部楼层
想知道楼主是怎么修改的,现在在学习ncl,需要用EOF分析
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

发表于 2019-11-10 21:58:37 | 显示全部楼层
楼楼,我发现插值之后EOF和先EOF在插值画图的结果的空间pattern相差很大,你做的都是一致的吗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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