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を使った方が良いです。