目錄:放眼望去全是bug
- 寫在前面的話
- Fatal
-
- 1.Number of subscripts do not match number of dimensions of variable,(2) Subscripts used, (3) Subscripts expected【√】
- 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)
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)