概述
目录:放眼望去全是bug
- 写在前面的话
- Fatal
- 1.Number of subscripts do not match number of dimensions of variable,(2) Subscripts used, (3) Subscripts expected【√】
- 2. mixhum_ptrh: The first three input arrays must have the same dimensions【√】
- Warning
- 1.dim_rmvmean_n: 21375 rightmost sections of the input array contained all missing values【√】
写在前面的话
最近在学习NCL绘图,不是在debug就是在debug的路上┭┮﹏┭┮,决定慢慢记录一下不断发现的错误,很多问题回看起来有点无脑,有些还在解决中~冲就完事啦!
Fatal
1.Number of subscripts do not match number of dimensions of variable,(2) Subscripts used, (3) Subscripts expected【√】
2021.6.4
存在数组或函数维度与原数据维度不一致的问题
解决方案1. 核查代码是否存在维度不一致
;根据DJF海温计算区域ENSO指数
ensoi=wgt_areaave_Wrap(sst_DJF({-5:5},{190:240}),1.0,1.0,0)
首先利用哈德莱海温资料计算DJF海温季节平均值,后利用wgt_areaave_Wrap 函数计算南北纬5°之间、经度190°至240°间的区域平均值。
函数中sst_DJF数组维数为二维,与资料不符。
;改后代码
ensoi=wgt_areaave_Wrap(sst_DJF(0,{-5:5},{190:240}),1.0,1.0,0)
解决方案2.进行数据升/降维操作
以下给出常见的函数
;多维数组转换为另一多维数组(仅改变维数,不改变大小)
reshape(val,dims)
2. mixhum_ptrh: The first three input arrays must have the same dimensions【√】
2021.10.30
用于计算混合比的函数mixhum_ptrh后参数的大小不一致,压强为17层的一位数组,而温度为包含压强p,经度lon和纬度lat的三维数组。对于既定的计算函数一般都要求计算参量维度match。
解决方案. 将p数组拓展到和t数组相同的大小
利用conform 函数拓展
;;June920—data643;;;;
temp = f0->air(643,:,{10:60},{60:140})
z = f1->hgt(643,:,{10:60},{60:140})
rh_e = f2->rhum(643,:,{10:60},{60:140})
pres = f0->level
;;;;;;;;;;calculate mixing ratio;;;;;;;;;;;;;;;;;;;;
p = conform(temp,pres,0)
tK = temp ;;units
rh = rh_e ;;units:%
q = mixhum_ptrh(p, tK ,rh,-1) ; specific humidity (g/kg)
print(q)
exit
其中option=0表示温度t数组为三维,1表示为4维。
Warning
1.dim_rmvmean_n: 21375 rightmost sections of the input array contained all missing values【√】
21.6.6
表面意思是输入数组的最右侧存在大量的缺测数据,缺测数据一般在球距平时可以自动识别。所以初步判定读取哈德莱海温数据时存在的问题,涉事代码如下:
year=ispan(1940,2018,1)
it_s=194012;;海温数据
it_e=201911
;;;;;HadIsst——1870-2019;;;;
f_sst=addfile("/data/home/Data/SST/HadISST_sst.nc","r")
time =f_sst->time;;读取日期数据
YYYYMM=cd_calendar(time,-1);;转换为公历日期(-1的意思忘了)
rec_s=ind(it_s.eq.YYYYMM);;开始日期的记录号
rec_e=ind(it_e.eq.YYYYMM);;终止日期的记录号
sst=f_sst->sst
sst_34=sst(rec_s:rec_e,{-5:5},{190:240})
;printVarSummary(sst)
sst_DJF=month_to_season(sst_34, "JFM");求JFM的季节平均(因为脚本的起始月是12月)
;print(sst_DJF(:,90,180))
copy_VarMeta(sst(0,:,:),sst_DJF(0,:,:));copy_VarMeta(var_from, var_to)将前者的属性给后者
;;;在画图之前求出的变量要定义数组维数
sst_DJF!0="year";;;第一维的变量名字是year
sst_DJF&year=sst_34&year;;第一维的数据从sst_34中提取
sst_ano=dim_rmvmean_n(sst_DJF,0);;√计算数组距平值;
解决方案:将哈德莱海温经度转化为0-360°的格式
在赋值完海温数据之后加上lonPivot函数
sst=f_sst->sst
;;;;加上一句;;;;;;;
sst=lonPivot(sst, 0.5);;;转化完成
sst_34=sst(rec_s:rec_e,{-5:5},{190:240})
;printVarSummary(sst)
最后
以上就是跳跃泥猴桃为你收集整理的【NCL初学】问题记录与解决ing写在前面的话FatalWarning的全部内容,希望文章能够帮你解决【NCL初学】问题记录与解决ing写在前面的话FatalWarning所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复