ここでは欠損値を持ったデータを扱う際の便利な方法について見ていきたいと思います。
欠損値を持った NArray の配列を扱う場合
missing1.rb
もしくは
missing2.rb
となります。
ruby ではすべてはオブジェクトであり配列自身に欠損値情報をもたせることが出来ます。
NArrayMiss クラスは NArray の配列とマスクをあわせ持ったものです。
NArrayMiss クラスを利用すると
missing3.rb
のように、欠損のことを気にすること無く演算ができます。
四則演算以外にもいくつかのメソッドが用意されています。 ドキュメント参照のこと
NArrayMiss#% NArrayMiss#** NArrayMiss#sum NArrayMiss#accum NArrayMiss#min NArrayMiss#max NArrayMiss#mean NArrayMiss#stddev |
DCLでお絵書きする際に欠損値処理を有効にするためには
require "numru/dcl" include NumRu rmiss = -9.99e10 # example DCL::gllset("lmiss",true) DCL::glrset("rmiss",rmiss) |
また現時点では Ruby-DCL は NArrayMiss クラスを扱うことが出来ないため NArray に変換する必要があります。
NArrayMiss#to_na([missing_value]) |
NetCDFのデータを扱う場合は、 まず NArray として読み出した後に NArrayMiss に変換します。
NArrayMiss#to_nam(ary [,mask]) |
mask = x.eq(rmiss) |
mask = x.gt(rmiss/2) # when rmiss<0 mask = x.le(rmiss*0.8) # when rmiss>0 |
1999年1月の1日4回31日分の200hPaでのUのデータu.199901.nc
を読み込んで、
その時間平均を描く例を示します。
missing6.rb