【NCL初学】问题记录与解决ing

这篇博客记录了作者在学习NCL(NCAR Command Language)绘图过程中遇到的错误及解决办法,包括数组维度不匹配、输入参数尺寸不一致和处理缺失值等问题。通过代码示例和解决方案,作者分享了如何检查和调整数组维度,使用conform函数匹配参数尺寸,以及处理含有大量缺失值的数据。
摘要由CSDN通过智能技术生成

写在前面的话

最近在学习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)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值