本ライブラリはデータ形式に依存しないプログラミングを可能とし、またデータ変数と座標変数を一体化した「物理量」としてデータを扱うためのライブラリである。ここでデータ変数とは値を収める多次元配列と、データに関する付加的情報の組であり、座標変数は座標値の数値配列と座標に関する付加的情報の組である。
クラス構成は次の通りである。メソッド一覧は本ライブラリの構成を参照のこと。
NumRu
GData(未実装) データクラス
GDataFile(未実装) ファイルデータを扱うクラス
Coord(未実装) 座標クラス
本ライブラリは既にインストールされているものとする。(インストール方法はINSTALL、INSTALL.jp(日本語)を参照)
使用するには
require 'numru/gphys'
とすればよい。
また、
include NumRu
とすることにより、GPhysライブラリ内の各クラスにおいてNumRuを省略可能となる。これを行わない場合は NumRu::GPhys.new などとして各クラスを扱わねばならない。
まず、本ライブラリにより異なる形式のデータがほぼ同じプログラムで取り扱うことができるわけだが、これは各ファイル形式毎に異なるクラスを用意することにより実現している。本ライブラリにおいてこれらはGDataxxxというクラスである。そのクラスにファイル形式に依存しないインターフェースを持つメソッドを定義し、その中でファイル形式に応じた呼び出しを行う。すなわち、プログラム上は同じ名前のメソッドを呼んでいてもレシーバとなるオブジェクトのクラスが違えばそれぞれのクラスのメソッドが呼ばれるので結果、異なる形式のデータがほぼ同じプログラムで取り扱えるわけである。
また、データ変数と座標変数を一体として扱うには、データ変数と座標変数を内部変数として持つクラスを用意すればよい。本ライブラリにおいてはGPhysクラスがその役割を果たす。
本ライブラリでは、GPhysオブジェクトやGDataオブジェクトに対して属性を設定することができる。そしてある決まった名前の属性に関しては本ライブラリが自動的に解釈を行う。本ライブラリが解釈することのできる属性は次の通りである。
すなわち、ユーザが属性を設定する場合、その名前は上で述べた属性名にすることが望ましい。これら以外の属性は自動的には解釈されない。従って、その処理はユーザが行わなければならない。
initialize(data_new, coord_new=nil)
GPhysオブジェクトを生成する。
引数
備考
GPhysクラスの全ての初期化関数はこのメソッドを呼んでいる。
new2(narray, destination, attr=nil, coord_new=nil)
配列とデータクラスを指定してGPhysオブジェクトを生成する。
引数
備考
このメソッドは内部で指定したデータクラス(destination)の初期化を行っている。
open(uri, mode="r")
ファイルを開き、GPhysクラスの初期化を行う。
引数
備考
modeはRubyのファイルモードと同じである。
set_value(narray)
データの配列を設定する。
引数
備考
設定される配列は元の配列と形が同じでなければならない。
get_value
データの配列を取り出す。
引数
なし
備考
返り値はNArrayオブジェクトである。
set_axis_value(dim, narray)
指定した次元の座標変数の配列を設定する。
引数
備考
get_axis_value(dim)
指定した次元の座標変数の配列を取り出す。
引数
備考
set_coord(coord)
座標を設定する。
引数
備考
[*index]
オブジェクトの切り出しを行う。
引数
備考
[index] = val
オブジェクトへの書き込みを行う。
引数
備考
set_att(name, val)
データの属性を設定する。
引数
備考
属性名については((<GPhysが解釈する属性>))を参照のこと。
get_att(name)
データの属性を取り出す。
引数
備考
set_axis_att(dim, name, value)
指定した次元の座標変数の属性を設定する。
引数
備考
get_axis_att(dim, name)
指定した次元の座標変数の属性を取り出す。
引数
備考
clone
オブジェクトのコピーを行う。
引数
なし
備考
このメソッドはディープなコピーを行わない。即ち、内部変数であるデータオブジェクトと座標オブジェクトは共通で別オブジェクトを作る。
copy
オブジェクトのコピーを行う。
引数
なし
備考
このメソッドはディープなコピーを行う。即ち、内部変数であるデータオブジェクトと座標オブジェクトもそれぞれコピーし別オブジェクトを作る。
process(option=nil)
データの加工を行う。
引数
備考
オプションを与えるハッシュのキーとして次のものを用いることができる。 * dvn(n=1,2,....): n次元目に関するインデックスを指定する。値にはFixnumまたはRangeを指定する。 例)dv1=>2..7 * to2d: 2次元化を行う。最初の2つの次元の全ての要素と残りの次元の最初の要素を切り出す。to2d=>true で有効となる。
to2d(option=nil)
データを2次元化する。
引数
備考
オプションを与えるハッシュのキーとして次のものを用いることができる。
dvn(n=1,2,....): n次元目に関するインデックスを指定する。値にはFixnumまたはRangeを指定する。
例)dv1=>2..7
data
GPhysオブジェクト内部のデータオブジェクトを取り出す。
引数
なし
備考
返り値はデータオブジェクトである。
+(other)
加算を行う。
引数
備考
-(other)
減算を行う。
引数
備考
*(other)
積算を行う。
引数
備考
/(other)
除算を行う。
引数
備考
sum(dim)
指定した次元に関する和をとる。
引数
備考
avg(dim)
指定した次元に関する平均をとる。
引数
備考
var(dim)
指定した次元に関する分散をとる。
引数
備考
stddev(dim)
指定した次元に関する標準偏差をとる。
引数
備考
dim, rank
次元数を返す。
引数
なし
備考
返り値はFixnumである。
shape
データの形を返す。
引数
なし
備考
返り値はArrayである。
total
配列の全要素数を返す。
引数
なし
備考
返り値はFixnumである。
その他、GDataクラスで利用できるメソッドは全て利用できる。
データクラスはデータ変数を扱うためのクラスである。内部情報として数値配列とデータに関する情報(名前、単位など)を持っている。GDataクラスはメモリ上のデータに関するクラスGDataMemとファイルデータを扱うためのクラスGDataFileのスーパークラスである。本クラスには全てのデータ形式に共通なメソッドを定義する。(現在未実装)
Object
initialize(narray, attr=nil)
初期化を行う。
引数
備考
GDataMemクラスの全ての初期化関数はこのメソッドを呼んでいる。
new2(name,ntype,shape,attr=nil)
データ型と配列の形から初期化を行う。
引数
備考
データ型は次のものが指定できる。
new3(name, narray, attr=nil)
配列から初期化を行う。
引数
備考
maxsize
データを分割するサイズの最大値を返す。
引数
なし
備考
本メソッドはデータの自動分割に関係する。詳しくは((<大規模データの取り扱い>))を参照のこと。
maxsize=(size)
データを分割するサイズの最大値を設定する。
引数
備考
本メソッドはデータの自動分割に関係する。詳しくは((<大規模データの取り扱い>))を参照のこと。
create_another(shape=nil, ntype=nil, attr=nil)
同じ属性を持つGDataMemオブジェクトを作る。
引数
備考
本メソッドは別のデータオブジェクトを作る。コピー先のクラスはコピー元と同じである。
clone
オブジェクトの複製を行う。
引数
なし
備考
本メソッドはディープなコピーは行わない。本メソッドは配列はコピー元と共通に持ち、属性のみのコピーを行う。
copy(destination=nil, dimname=nil, filename=nil)
オブジェクトの複製を行う。
引数
備考
[*index]
データの切り出しを行う。
引数
備考
[*index]=val
オブジェクトへの書き込みを行う。
引数
備考
get
現在の数値配列を取り出す。
引数
なし
備考
返り値はNArrayオブジェクトである。
set(ary)
数値配列を変更する。
引数
備考
get_att(attname)
属性の値を参照する。
引数
備考
set_att(attname, val)
属性を設定する。
引数
備考
属性名については((<GPhysが解釈する属性>))を参照のこと。
name
データの名前を参照する。
引数
なし
備考
get_attr("name")と同じである。
name=(name)
データの名前を設定する。
引数
備考
set_attr("name", name)と同じである。
valid_range
データの有効範囲を参照する。
引数
なし
備考
set_attr("valid_range")と同じである。
valid_range=(range)
データの有効範囲を設定する。
引数
備考
set_attr("valid_range", range)と同じである。
units
データの単位を参照する。
引数
なし
備考
get_attr("units")と同じである。
units=(units)
データの単位を設定する。
引数
備考
map(mapper)
データの参照のみの切り出しを行う。
引数
備考
詳しくは((<参照のみのサブセット切り出し>))を参照のこと。
each_subset(forbit=nil){|data|
データオブジェクトの各サブセットに関する繰り返しを行う。
引数
備考
each_slicer(forbit=nil){|mapper|
データオブジェクトの各サブセットを指すインデックスに関する繰り返しを行う。
引数
備考
indgen, indgen!(initial=nil, increaze=nil)
配列の要素を指定した初期値、増加量で増やす。
引数
備考
indgen!は自分自身の変更を表す。
fill, fill!
配列を同一の値で埋める。
引数
なし
備考
fill!は自分自身の変更を表す。
random, random!
配列の値を0から指定した値までのランダム値に設定する。
引数
なし
備考
reshape, reshape!, shape=(newshape)
配列の形を変更する。
引数
備考
redhape!は自分自身の変更を表す。
newdim, newdim!(dim)
長さ1の次元を挿入する。
引数
備考
newdim!は自分自身の変更を表す。
floor
selfよりも小さい最大の整数を返す。
引数
なし
備考
ceil
selfよりも大きい最小の整数を返す。
引数
なし
備考
round
selfに最も近い整数を返す。
引数
なし
備考
to_f
値を浮動小数点数に変換する。
引数
なし
備考
to_i
値を整数に変換する。
引数
なし
備考
dim, rank
次元数を返す。
引数
なし
備考
返り値はFixnumである。
shape
現在の配列の形を返す。
引数
なし
備考
返り値はArrayである。
total
現在の配列の要素数を返す。
引数
なし
備考
返り値はFixnumである。
+(other)
加算を行う。
引数
備考
-(other)
減算を行う。
引数
備考
*(other)
積算を行う。
引数
備考
/(other)
除算を行う。
引数
備考
add(other, klass=nil)
結果を別オブジェクトとできる加算
引数
備考
sub(other, klass=nil)
結果を別オブジェクトとできる減算
引数
備考
mul(other, klass=nil)
結果を別オブジェクトとできる積算
引数
備考
div(other, klass=nil)
結果を別オブジェクトとできる除算
引数
備考
sum(dim)
指定した次元に関する和
引数
備考
avg(dim)
指定した次元に関する平均
引数
備考
var(dim)
指定した次元に関する分散
引数
備考
stddev(dim)
指定した次元に関する標準偏差
引数
備考
物理量ライブラリの実装が進み、利用できるデータ形式が増えるにしたがっ
てその管理は難しくなる。共通部分は上位クラスにまとめて定義することでデー タクラスの実装や管理が簡単になり、開発効率が増す。ファイルを扱うデータ クラスとしてGDataFileクラスを設け、各ファイル形式毎のクラスはGDataFile のサブクラスとする。
GDataFileクラスの実装に移る前に現在実装されているGDataMemと
GDataNetCDFの構成について述べる。まず、GDataMemの内部変数は数値配列と データの属性である。一方、NetCDFVarオブジェクトはデータの属性を内部に 持っているため、GDataNetCDFの内部変数はNetCDFVarオブジェクトのみである。 その他様々なデータ形式に関してもデータ変数内にデータの属性が定義できる かできないかで次の2種類に分類することができる
データクラスを上の2種類に統一するためにはデータクラスの下位レベルで予 め統一された枠組みを用意しなければならない。そこでこの枠組みを各データ 形式の入出力ライブラリ内で用意する。すなわち、入出力ライブラリの構成要 素として、RubyNetCDFのNetCDFクラスに相当するファイルクラスとNetCDFVar クラスに相当する変数クラス、そしてNetCDFAttクラスに相当する属性クラス が必要である。NetCDFDimに相当するクラスはデータ操作には関係ない部分な ので実装する必要はない。入出力ライブラリの統一により、各データクラスの メソッド内での入出力ライブラリメソッドの呼び出しが統一される。従って共 通メソッドをGDataFileクラスに定義することができる。
GData
本クラスはNetCDFファイルのデータを扱うためのクラスである。
GDataFile
initialize(netcdfvar)
初期化を行う。
引数
備考
GDataNetCDFクラスの全ての初期化関数はこのメソッドを呼んでいる。
new2(name, ntype, shape_ul0, dimname, filename=nil, attr=nil, mode="r+")
データ型と配列の形から初期化を行う。
引数
備考
データ型は次のものが指定できる。
modeはRubyのファイルモードと同じである。
new3(name, narray, dimname, filename=nil, attr=nil, mode="r+")
配列から初期化を行う。
引数
備考
modeはRubyのファイルモードと同じである。
open(name, filename, mode="r")
ファイルを開き、初期化を行う。
引数
備考
modeはRubyのファイルモードと同じである。
create_another(shape=nil, ntype=nil, file=nil, attr=nil)
同じ属性を持つGDataMemオブジェクトを作る。
引数
備考
本メソッドは別のデータオブジェクトを作る。コピー先のクラスはコピー元と同じである。
copy(destination=nil, filename=nil)
オブジェクトの複製を行う。
引数
備考
[*index]
データの切り出しを行う。
引数
備考
[*index]=val
オブジェクトへの書き込みを行う。
引数
備考
each_slicer(forbit=nil){|mapper|
データオブジェクトの各サブセットを指すインデックスに関する繰り返しを行う。
引数
備考
each_subset(forbit=nil){|data|
データオブジェクトの各サブセットに関する繰り返しを行う。
引数
備考
set(ary)
数値配列を変更する。
引数
備考
get
現在の数値配列を取り出す。
引数
なし
備考
返り値はNArrayオブジェクトである。
get_att(attname)
属性の値を参照する。
引数
備考
set_att(attname, val)
属性を設定する。
引数
備考
属性名については((<GPhysが解釈する属性>))を参照のこと。
name
データの名前を参照する。
引数
なし
備考
get_attr("name")と同じである。
name=(name)
データの名前を設定する。
引数
備考
set_attr("name", name)と同じである。
valid_range
データの有効範囲を参照する。
引数
なし
備考
set_attr("valid_range")と同じである。
valid_range=(range)
データの有効範囲を設定する。
引数
備考
set_attr("valid_range", range)と同じである。
units
データの単位を参照する。
引数
なし
備考
get_attr("units")と同じである。
units=(units)
データの単位を設定する。
引数
備考
indgen, indgen!(initial=nil, increaze=nil)
配列の要素を指定した初期値、増加量で増やす。
引数
備考
indgen!は自分自身の変更を表す。
fill, fill!
配列を同一の値で埋める。
引数
なし
備考
fill!は自分自身の変更を表す。
random, random!
配列の値を0から指定した値までのランダム値に設定する。
引数
なし
備考
reshape, reshape!, shape=(newshape)
配列の形を変更する。
引数
備考
redhape!は自分自身の変更を表す。
newdim, newdim!(dim)
長さ1の次元を挿入する。
引数
備考
newdim!は自分自身の変更を表す。
floor
selfよりも小さい最大の整数を返す。
引数
なし
備考
ceil
selfよりも大きい最小の整数を返す。
引数
なし
備考
round
selfに最も近い整数を返す。
引数
なし
備考
to_f
値を浮動小数点数に変換する。
引数
なし
備考
to_i
値を整数に変換する。
引数
なし
備考
dim, rank
次元数を返す。
引数
なし
備考
返り値はFixnumである。
shape
現在の配列の形を返す。
引数
なし
備考
返り値はArrayである。
total
現在の配列の要素数を返す。
引数
なし
備考
返り値はFixnumである。
+(other)
加算を行う。
引数
備考
-(other)
減算を行う。
引数
備考
*(other)
積算を行う。
引数
備考
/(other)
除算を行う。
引数
備考
add(other, klass=nil)
結果を別オブジェクトとできる加算
引数
備考
sub(other, klass=nil)
結果を別オブジェクトとできる減算
引数
備考
mul(other, klass=nil)
結果を別オブジェクトとできる積算
引数
備考
div(other, klass=nil)
結果を別オブジェクトとできる除算
引数
備考
sum(dim)
指定した次元に関する和
引数
備考
avg(dim)
指定した次元に関する平均
引数
備考
var(dim)
指定した次元に関する分散
引数
備考
stddev(dim)
指定した次元に関する標準偏差
引数
備考
本モジュールはGPhysオブジェクトを可視化するためのモジュールである。GPhysの持つデータ変数と座標変数が一体化しているという特徴を生かし、可視化を行うことが出来る。
また、本モジュールはAdvancedDCLを用いたものとなっており、本モジュールとAdvancedDCLを併用することによりより細かい可視化が可能となる。
更に、GPhysオブジェクトに設定した属性を自動的に解釈し、可視化を行う。解釈する属性についてはGPhysが解釈する属性を参照のこと。
contour(option=nil)
等高線図を描く。
引数
備考
可視化オプションはAdvancedDCLにおけるパラメタ名、値を指定する。この設定はテンポラリなパラメタ設定となるので、描画後設定したパラメタは元の値に戻る。それが好ましくない場合はAdvancedDCLをユーザが直接用いパラメタ設定することになる。
座標クラスは各次元毎の座標変数をまとめ、1つの座標として扱うためのクラ スである。ここで、座標変数とは座標値を収める数値配列と軸に 関する付加 的情報のことであり、データクラスのオブジェクトである。 座標クラスは各 次元毎に、内部変数として各次元毎に座標変数と補助変 数を持っている。こ こで補助変数とは重み情報など座標変数に関わりの ある変数を表し、データ クラスのオブジェクトである。座標クラスとし て、現在は格子点データを扱 うCoordRegクラスが利用できる。
Object
initialize(coord=nil)
初期化を行う。
引数
備考
rank
次元数を返す。
引数
なし
備考
shape
各次元の長さをまとめて返す。
引数
なし
備考
get_axis(dim)
指定した次元のデータを返す。
引数
備考
返り値はGDataである。
set_axis(dim, var)
指定した次元のデータを設定する。
引数
備考
get_axis_att(dim, name)
指定した次元の属性を参照する。
引数
備考
属性名については((<GPhysが解釈する属性>))を参照のこと。
set_axis_att(dim, name, val)
指定した次元の属性を設定する。
引数
備考
属性名については((<GPhysが解釈する属性>))を参照のこと。
get_supl(dim)
指定した次元の補助変数を取り出す。
引数
備考
get_axis_value(dim)
指定した次元のデータ配列を取り出す。
引数
備考
set_axis_value(dim)
指定した次元のデータ配列を設定する。
引数
備考
copy
オブジェクトの複製を行う。
引数
なし
備考
slicer(option)
オプションからデータの切り出しを行う。
引数
備考
オプションを与えるハッシュのキーとして次のものを用いることができる。 * dvn(n=1,2,....): n次元目に関するインデックスを指定する。値にはFixnumまたはRangeを指定する。 例)dv1=>2..7 * to2d: 2次元化を行う。最初の2つの次元の全ての要素と残りの次元の最初の要素を切り出す。to2d=>true で有効となる。
[*index]
データの切り出しを行う。
引数
備考
本ライブラリにおいて、データの切り出しには大きく2種類ある。最初の方法がメモリ上に新たに領域を確保し、切り出したデータをそこに収める方法である。そしてもう1つの方法が参照のみのサブセット切り出しである。これを行うためにMapperクラスを設け、データクラスの内部変数としてMapperオブジェクトを持たせ、データオブジェクトがデータ変数全体のどの位置を指しているかという情報を持たせている。この方法はその場で新たなメモリ領域を確保しないと言う点で前者と大きく異なる。前者の方法は[ ]メソッド、後者の方法はmapメソッドを用いて行う。
本ライブラリでは大規模データを扱うための機能を組み込んだ。これはデータ分割をどのように行うのかを自動的に決定するものである。従来だとユーザがどのようにデータを分割するかを決定した上でプログラミングを行わなければならなかったが、本ライブラリを用いることでその負担が解消される。本ライブラリにおけるデータの分割は回転の遅い次元(NArrayでは最後の次元)から分割のための適当なサイズの上限に応じて優先的に分割を行う。即ち、まず最後の次元に関する分割が行われ、それでも上限を上回る場合はその次の次元についても分割が行われる。また、分割にあたってユーザが予め様々な項目を設定できる。
分割しない次元をユーザが指定できる。
ある次元に関する平均操作など、分割してはいけない次元が存在する場合、その次元を分割しないように指定することができる。