簡體   English   中英

如何使用CDO統計滿足設定條件的長度為5<=N<10天的事件數?

[英]How to count number of events of length 5<=N<10 days meeting a set condition using CDO?

我需要有關對 .netcdf 文件進行 CDO 操作的幫助。 我在網格區域從 ERA5 下載了 40 年的數據集,並使用 cdo 將范圍 (30-50) 的變量值屏蔽為 1,將其他值屏蔽為 0。

cdo -expr,'var2=var*(var>=30 && var<50)' data1.nc data2.nc

現在我想計算每個網格單元在過去 40 年中連續 5 天但少於 10 天記錄 var2= 1 的次數。 可以使用 cdo 或 nco 嗎?

首先,我假設您的輸入已轉換為每日,您不說。

然后你還需要澄清這個問題。 你的標題本來是說“如何計算天數?”,但是有點含糊?

假設您有這樣一個代表 8 天活動的系列:

0 0 1 1 1 1 1 1 1 1 0 0 0 0 

這算作單次出現嗎? 你的文字似乎暗示是這種情況,但標題不是,我想你想知道“事件數”而不是“天數”,所以我編輯了你的標題以與問題的正文一致,我希望這個解釋是正確的。

我認為你可以做到,但解決方案有點冗長。 您可以使用runsum為任何一天提供一個“1”,即 1 並且在一系列 N 天的末尾,如下所示:

cdo gec,N -runsum,N in.nc out5.nc

但這並不能完全回答你的問題。 例如,如果 N=5 這會將上述系列轉換為:

0 0 0 0 0 0 1 1 1 1 0 0 0 0 

即在 5 天的系列結束時還有 4 天。

我們如何獲得事件長度的上限? 好吧,如果我們對超過 10 天的事件進行相同的計算,然后加在一起,我們得到

  1. 不是事件
  2. 至少 5 天但少於 10 天的事件,
  3. >10 天(當然還有 >5 天)的事件

所以我們只需添加兩個系列並挑選出 1 以獲得您需要的事件長度范圍:

cdo gec,10 -runsum,10 in.nc out10.nc
# only keep events of 5,6,7,8 and 9 days in length:
cdo eqc,1 -add out5.nc out10.nc out5-10.nc 

好的,現在我們有一個文件,當它處於至少 5 天但少於 10 天的系列結束時,var=1。

現在這是很酷的部分,我們可以使用相同的技術使用 runmean/runsum 來獲取每個系列的開始和結束,然后我們可以將這些事件相加。 如果我們應用大小為 2 的runsum運行總和,這會為“0 1”或“1 0”序列生成 1,即它會選取每個事件的起點和終點。

cdo eqc,1 -runsum,2 out5-10.nc out_start_end.nc

此命令將我們的示例系列變為以下內容,因為我們只看到了一系列“0 1”或“1 0”結果為 1:

0 0 0 0 0 0 1 0 0 1 0 0 0 0 

現在我們只需要及時求和並除以 2(我告訴過你這是啰嗦了!)

cdo divc,2 -timsum out_start_end.nc number_of_events.nc 

噠噠!

請注意 1如果整個輸入序列在事件中結束,例如 0 0 1 1 1,此方法將把它算作一個“半”事件,因為您只選擇了開始。 如果這讓您不高興,請向下舍入到最接近的 integer。

把這些放在一起(你可能可以 pipe 來組合其中的一些),這里是涉及 10 個 cdo 命令的整個解決方案的總結:

cdo gec,5 -runsum,5 in.nc out5.nc
cdo gec,10 -runsum,10 in.nc out10.nc
cdo eqc,1 -add out5.nc out10.nc out5-10.nc 
cdo eqc,1 -runsum,2 out5-10.nc out_start_end.nc
cdo divc,2 -timsum out_start_end.nc number_of_events.nc 

注意 2runsum命令將使用 window 中點作為日期/時間戳,但這對於此用例並不重要。 如果有人還想使用 outN.nc 文件來查看事件日期,那么通常使用--timestat_date last來延遲時間戳,有關詳細信息,請參閱此視頻

注釋 3如果您將事件中的一系列天數相加,您現在可以將其除以事件數以獲得平均事件長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM