[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002329] Re: GGraph:line, missing_value



竹広さん 

> もしかして gphys (netcdf) 変数をオープンしたときに, 
> データが NArrayMiss で読み込まれ, そこで欠損要素であるかを
> 判定する際に missing_value 属性の値が使われているのでしょうか? 
> いったん NArrayMiss データとなると, もはや欠損値がいくらで
> あったかということは関係ない, というのは正しいでしょうか? 

まさにその通りです.

NArrayMiss は,欠損かどうかをバイト型のフラグ配列で持ってて,
欠損かどうかは中身の値でなくフラグで決まることになってます.
データ欠損の指定法というのはいろいろあって,何か欠損「値」を決め
る場合や,ある範囲にあるものだけを正常と見なす場合などがあります
が,異なる指定法のデータが交じっても(例えば足し算したりしても)
うまく扱えるように,値でなくフラグで管理するようになってます. 

そんなわけなので,RubyDCL は NArrayMiss を解釈する際,
データ欠損である箇所に,自分が欠損値と解釈する値を代入した
NArray を作って使うようにしてあります.そういうことがしやすいよ
う NArrayMiss#to_na(missval=nil) というメソッドがあって,引数で
値を指定すれば,欠損部分にその値を埋めた NArray を返すようになっ
てます.

参考まで,欠損のある NetCDF のデータを NArrayMiss に読み込むい
うのは,RubyNetCDF レベルで実装されている機能です
(NetCDFVar#get_with_miss_and_scaling というメソッドを使うと,
もしあれば add_offset と scale_factor を解釈した上で,
データ欠損値指定のあるデータは NArrayMiss,そうでないのは
NArray で値を読み込みます).GPhys としては,NetCDFファイルを読
み込む際にこれを使うようにしている以上には,データ欠損対応はして
ません.一旦 NArryMiss になったものは,欠損が然るべく自律的に扱
われることが期待されてるからです.例えば平均を取る際に,欠損値の
部分をよけて集計するというのは,NArrayMiss 自身の機能です.また,
絵を書くときも上述のように,RubyDCL に NArrayMiss 解釈機能が埋め
込まれてます.

堀之内 武                    horinout@xxxxxxxxxxxxxxxxxx
京都大学生存圏研究所               611-0011 宇治市五ヶ庄