GrADS 領域平均 2つの表記方法

GrADSで領域平均の方法を紹介します。

GrADSでは、重み付き平均(ave)と単純平均(mean)のコマンドが存在します。

averageとmeanの話は、以下の記事を参照してください。

実は、それぞれに2通りの方法があります。

重み付き平均

GrADSは、全球規模の気象データを可視化するのに特化したアプリケーションであるため、緯度間で間隔が異なるため平均を求めるときは、専ら重み付き平均を計算することが多いです。

一次元の重み付き平均は、以下のように記述します。

ga->ave=ave(var,x=start,x=end)

varは、平均を求めたい変数、startとendは、それぞれ平均したい範囲になります。

二次元の重み付き平均(領域平均)は、以下のように記述します。

ga->ave=aave(var,x=start,x=end,y=start,y=end)

二次元の重み付き平均では、aaveを用いますが、使わない方法もあります。

ga->ave=ave(ave(var,x=start,x=end),y=start,y=end)

前者と後者の方法で値は一致しました。

単純平均

一次元の単純平均は、以下のように記述します。

ga->mean=mean(var,x=start,x=end)

二次元の重み付き平均(領域平均)は、以下のように記述します。

ga->mean=amean(var,x=start,x=end,y=start,y=end)

同様にaamenを用いずにmeanを2回用いて、

ga->mean=mean(mean(var,x=start,x=end),y=start,y=end)

こちらも前者と後者で値が一致しました。

どっちがいいのか

欠損値(undef)が含まれる場合

aave、ameanの方法は、欠損値を考慮して計算します。一方そうでない方法(ave、meanを2回)は、欠損値を考慮せず計算します。

欠損値を考慮するとは、欠損値があるとき、そこのデータを0として計算しています。

欠損値を考慮しないとは、欠損値があるとき、完全にないものとして計算しています。

欠損値(undef)が含まれない場合

aave、ameanの方法と一方そうでない方法(ave、meanを2回)と同じ計算結果になります。

しかし、値が同じでも明らかに挙動が異なっていました。

aave、ameanの方法の方がそうでない方法(ave、meanを2回)より明らかに計算スピードは早いです。

また、aave、ameanの方法は、一文の出力だけなのに対して、そうでない方法(ave、meanを2回)では、大量に文字が出力されていました。

aaveの場合

Define memory allocation size= 8 bytes

aveを2回用いる場合

Averaging. dim=0 start=start, end=end
Averaging. dim=0 start=start, end=end
Averaging. dim=0 start=start, end=end
....
Define memory allocation size= 8 bytes

以上の事から、領域平均の際は、aave、ameanを使った方がよいと思われます。

頭文字aって何

領域平均のaave、ameanの頭文字のaって何だろうということですが、area(領域)のaだと思います。

まとめ

領域平均は2つの表記方法があります。

領域平均は、aave、ameanを使った方が良いです。