天天看點

【NCL初學】問題記錄與解決ing寫在前面的話FatalWarning

目錄:放眼望去全是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)
           
NCL