请选择 进入手机版 | 继续访问电脑版
爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

搜索
查看: 689|回复: 8

[作图] 《NCL数据处理与绘图实习教程》书上的问题

[复制链接] |关注本帖

新浪微博达人勋

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

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

x
本帖最后由 yysunnyboy 于 2018-7-14 13:37 编辑

大家好,我正在看施宁老师的《NCL数据处理与绘图实习教程》,有个问题想请教大家。  

书上第四章“厄尔尼诺年的环流合成”中第39页,在计算sst的显著性时有以下代码:

;;;(3) enso index (5N-5S, 170-120W);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ensoi = wgt_areaave_Wrap(sst_DJF(:,{-5:5},{190:240}), 1, 1, 0)   ; 0表示仅用非缺省的数值进行计算
  ensoi = dim_standardize_Wrap(ensoi, 1)   ;1 表示标准化时除以的是[N] ; 而0表示除以[N-1]

;;;(4) composite ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  irec_positive = ind(ensoi.gt.0.8)
  nnumb = dimsizes(irec_positive)
  sst_comp   = dim_avg_n_Wrap(sst_ano(irec_positive,:,:), 0)

;;; (5) t-test ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; sst
  sst_std = dim_variance_n_Wrap(sst_ano(irec_positive,:,:), 0)
  sst_std = sqrt(sst_std/nnumb)
  sst_std = where(sst_std.eq.0, sst_std@_FillValue, sst_std)
  t_sst   = sst_comp/sst_std
  confi_sst = sst_comp
  confi_sst = student_t(t_sst, nnumb-1)


我有两个问题:(1)最后两行红色代码中,为什么要重复计算confi_sst呢?我尝试删除confi_sst = sst_comp这一句,但得到的图就不一样了。我理解confi_sst = sst_comp 可以创建一个与数组sst_comp同大小的数组,但为什么一定要事先创建一个数组呢?代码中的其他变量(例如ensoi, irec_positive在计算时都没有提前用new创建啊?


(2)这个针对于厄尔尼诺年的sst的T检验有什么意义呢?sst显著与否可以说明什么问题呢?对于T检验,它可以用于比较两个样本之间的均值差异是否显著,也可以用来比较一个样本的均值与给定的数值之间是否有显著差异,但以上代码中只针对于厄尔尼诺年的sst进行了T检验,我不太理解这样做的目的? 或者说代码中把厄尔尼诺年的sst与什么做了比较?还请大家指教,谢谢!





密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2018-7-6 09:30:16 | 显示全部楼层 |取消关注该作者的回复
没有重复计算啊,只是图省事,没有用new去新建数组罢了,直接套用了sst_comp的基本dimension信息。
密码修改失败请联系qq:937062711

新浪微博达人勋

 楼主| 发表于 2018-7-6 12:43:51 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 yysunnyboy 于 2018-7-6 12:44 编辑
风往北吹 发表于 2018-7-6 09:30
没有重复计算啊,只是图省事,没有用new去新建数组罢了,直接套用了sst_comp的基本dimension信息。

多谢回复,我是小白,请问为什么需要用new新建数组,直接confi_sst = student_t(t_sst, nnumb-1)不可以吗?其他变量在计算时都没有提前用new新建呀!谢谢!
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2018-7-6 18:17:19 | 显示全部楼层 |取消关注该作者的回复
用new新建数组还要定义各种属性,麻烦,直接用confi_sst = sst_comp就可以把 sst_comp的属性copy给confi_sst ,下一步的显著性检验的计算会覆盖数据,不过这个需要数据维度大小一样
密码修改失败请联系qq:937062711

新浪微博达人勋

 楼主| 发表于 2018-7-7 00:38:31 | 显示全部楼层 |取消关注该作者的回复
黎允诺 发表于 2018-7-6 18:17
用new新建数组还要定义各种属性,麻烦,直接用confi_sst = sst_comp就可以把 sst_comp的属性copy给confi_ss ...

多谢回复,我是小白,请问为什么需要用new事先新建数组呢?直接confi_sst = student_t(t_sst, nnumb-1)不可以吗?其他变量在计算时都没有提前用new新建呀!谢谢!
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2018-7-7 15:11:51 | 显示全部楼层 |取消关注该作者的回复
yysunnyboy 发表于 2018-7-7 00:38
多谢回复,我是小白,请问为什么需要用new事先新建数组呢?直接confi_sst = student_t(t_sst, nnumb-1)不 ...

没有为什么,NCL语法就是这么规定的。关于数组的创建和传递,需要经验积累,譬如,A_ARRAY = (/B_ARRAY/),就是只传递数值,而不传递dimension基本信息和数据的;A_ARRAY = B_ARRAY,则是完全传递。有些函数的返回值是可以直接进行数组传递,但是没有基本的经纬度或者时间信息,你需要单独进行命名和赋值才能保证NCL在绘图时候能够按照特定的方式读取绘制,不然就会警告没有坐标信息或报错,当然,你的出图也是有问题的。
而manual 来弄就需要借助
copy_VarCoords函数

; Longitude co-ordinate
; ................
  nlon=42
  lon=fspan(73.5,135.0,42)
  lon!0="lon"
  lon&lon=lon
  lon@units="degrees_east"
  lon@long_name="Longitude"

; Latitude co-ordinate
; ................
  nlat=29
  lat=fspan(16.5,58.5,29)
  lat!0="lat"
  lat&lat=lat
  lat@units="degrees_north"
  lat@long_name="Latitude"
密码修改失败请联系qq:937062711

新浪微博达人勋

发表于 2018-7-9 09:52:44 | 显示全部楼层 |取消关注该作者的回复
楼上回复是可以的,差不多已经回答了你的问题了
密码修改失败请联系qq:937062711

新浪微博达人勋

 楼主| 发表于 2018-7-12 03:25:59 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 yysunnyboy 于 2018-7-12 03:27 编辑
风往北吹 发表于 2018-7-7 15:11
没有为什么,NCL语法就是这么规定的。关于数组的创建和传递,需要经验积累,譬如,A_ARRAY = (/B_ARRAY/) ...

谢谢大神的解释,我明白啦! 能否请你再回答下第二个关于T检验的问题呢?谢谢!
密码修改失败请联系qq:937062711

新浪微博达人勋

 楼主| 发表于 2018-7-12 03:26:43 | 显示全部楼层 |取消关注该作者的回复
黎允诺 发表于 2018-7-9 09:52
楼上回复是可以的,差不多已经回答了你的问题了

嗯嗯,我已经理解啦! 能麻烦你再看一下我提的第二个关于T检验的问题吗? 谢谢!
密码修改失败请联系qq:937062711
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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