Gphysライブラリマニュアル日本語版(非公式) - class NumRu::VArray
VArrayは仮想配列クラスで、多次元配列データをメモリ上(NArray、NArrayMiss)あるいはファイル中(NetCDFVar等)に保持します。ファイル中のデータの操作はVArrayNetCDF等のサブクラスによって行われ、この基礎クラスでは以下の二つの場合を操作します。
  1. NArrayでメモリー上に保持されたデータの場合
  2. 別のVArrayサブセットの場合(VArrayNetCDF等のサブクラスも可)
2つ目の場合についてもう少し説明します。この場合、VArray(A)は別のVArray(B)の部分集合(サブセット)として定義されるため、VArray(B)はその部分集合がどのようにVArray(A)にマッピングされているかという情報とそのリンクのみを保有します。

VArrayはちょうどNArrayと似た振る舞いをします。つまり、数値の多次元配列です。ただし、最も重要な違いとして、VArrayは一つの名前を持っており、NetCDF変数のように"属性"を保有することができます。そのため、VArrayはNetCDFVarを完璧に表現することができます。これは、VArrayNetCDFサブクラスによって実現されます。

用語
  • value(値) : VArrayに含まれる多次元数値配列、もしくはその内容
  • attribute(属性) : 一つのVArrayを説明する名前とデータの組み合わせ。通常はNumRu::Attributeクラスで実現される(もしくはVArrayNetCDFの中のNetCDFAttrのこと)。名前は文字列でなければならず、その属性値の型はNetCDFAttrと互換性のある少数のクラスに制限される(NumRu::Arrtibute参照)

クラスメソッド

VArray.new(narray=nil, attr=nil, name=nil)

コンストラクタ。
引数
  • narray (NArray or NArrayMiss, 初期値: nil) : 保持する配列。(nilは、protectedメドッドによって別のVArrayへのマッピングを初期化するために使用)
  • attr (NumRU::Attribute, 初期値: nil) : 属性。nilの場合は、空白。
    • 属性オブジェクトが生成・保持される
  • name (String, 初期値: nil) : VArrayの名前。nilの場合は"noname"が入る。
返り値
  • VArray
na = NArray.int(6,3).indgen!
va1 = VArray.new( na, nil, "test" )

VArray.new2(ntype, shape, attr=nil, name=nil)

もう一つのコンストラクタ。保持するNArrayを初期化するためにパラメータを使用。
引数
  • ntype (String or NArray constants) : 保持するNArrayの数値型(sfloat, float, NArray::SFLOAT, NArray::FLOATなど)
  • shape (Array of Integers) : NArrayの形状
  • attr (Attribute; 初期値: nil) 属性。nilの場合、空の属性オブジェクトが生成・保持される
  • name (String; 初期値: nil) VArrayの名前
返り値
  • VArray

インスタンスメソッド

val

NArray(もしくはNArrayMiss)として値を返す。
これはVArrayが他にマッピングしている場合でも同様である。また、 サブクラスで同様のことをするためにはこのメソッドを再定義しなければならない。
引数
  • なし
返り値
  • NArray(もしくはNArrayMiss)

val=(narray)

値を設定。
全ての値が設定される。部分的に設定したい場合は、[]=を使用する。このメソッドでは、値はnarrayから読み込まれ、内部のホルダーに設定される。そのため、例えば、narrayの数値型に関わらず数値型は変化しない。全体をnarrayで置き換えたければreplace_valを使用する。
引数
  • narray (NArray or NArrayMiss or Numeric) : 数値の場合は全値がそれに等しくなるように設定される。NArray(もしくはNArrayMiss)の場合は、その形状がVarrayの形状と合致してなければならない。

replace_val(narray)

内部の配列データをnarrayオブジェクトで置き換える。narrayの値をコピーしたい場合は、val=を使用する。
引数
  • narray (NArray or NArrayMiss) : 上記の通り。この形状はVArray(self)の形状と合致していなければならない。
返り値
  • self (if self.class == VArray)
  • new VArray (それ以外、つまりself.classがVArrayのサブクラスの場合)

[]

部分集合を取得。使い方はNArray#[]と同様。

[] =

部分集合を設定。使い方はNArray#[]=と同様。

attr

未定義。

ntype

数値型を返す。
引数
  • なし
返り値
  • String ("byte", "sint", "int", "sfloat", "float", "scomplex" "complex", "obj")
  • これはNArray.new内で別のNArrayを初期化する際にも使用可能

rank

階数(次元の数)を返す。

shape

形状を返す。

shape_current

shapeのエイリアス。

length

VArrayの長さを返す。

typecode

NArrayタイプコードを返す。

name

名前を返す。
返り値
  • (String) VArrayの名前

name=(nm)

名前を変更する。
引数
  • nm (String) : 新しい名前
返り値
  • nm

rename!(nm)

名前を変更する。(name=と同じ。ただし、自分自身を返す。)
引数
  • nm (String) : 新しい名前
返り値
  • self

rename(nm)

remane!と同じ。ただし、VArrayオブジェクトを複製し、それに名前を設定する。
ただし、たまにオリジナルを変化させないかどうか疑わしいときがあるので、サブクラスではサポートされないこともある。

copy(to=nil)

VArrayをコピーする。toがnilの場合は、深いクローンとして働く(全体のオブジェクトの複製)。
値と属性の両方がコピーされる。
引数
  • to (VArray (もしくはそのサブクラス) or nil): コピーされるVArray

reshape!( *shape )

トータルのサイズを変更せずに形状を変更する。サブクラスでは使用不可の可能性も。
引数
  • shape (Array of Integer) : 新しい形状
返り値
  • self
vary = VArray.new2( "float", [10,2])
vary.reshape!(5,4)   # changes the vary 
vary.copy.reshape!(2,2,5)  # make a deep clone and change it
      # This always works with a VArray subclass, since vary.copy
      # makes a deep clone to VArray with NArray.

file

VArrayのデータがファイル中にある場合はファイルオブジェクトを返し、メモリー上にある場合はnilを返す。
引数
  • なし
返り値
  • データが保存されているファイルを代表するオブジェクト。そのクラスはファイルタイプに依る。
  • nil(データがファイル中に無い場合)

transpose(*dims)

転置する。引数の要件はNArrayと同じ。

reshape(*shape)

再形成する。引数の要件はNArrayと同じ。

axis_draw_positive

軸を描く方向を返す。(selfが座標変数の場合のみ有効)
現在の実装はNetCDFの慣例に基づいているので、これが適切で無い場合はサブクラスで再定義する。
返り値
  • 以下のどれか
    • true : 軸は増加する方向に描かれる(右方向/上方向)
    • false: 軸は減少する方向に描かれる
    • nil : 指定なし

axis_cyclic?

軸が周期的かどうかを返す。(selfが座標変数の場合のみ有効)
現在の実装はNetCDFの慣例に基づいているので、これが適切で無い場合はサブクラスで再定義する。
返り値
  • 以下のどれか
    • true : 周期的
    • false: 周期的でない
    • nil : 指定なし

axis_modulo

周期的な軸のモジュロを返す。(selfが座標変数でかつ周期的な場合のみ有効)
現在の実装はNetCDFの慣例に基づいているので、これが適切で無い場合はサブクラスで再定義する。
返り値
  • 以下のどれか
    • Float (モジュロが定義されている場合)
    • nil (モジュロが見つからない場合)

axis_cyclic_extendible?

(selfが座標変数の場合のみ有効)selfが周期的で、かつ周期的に拡張可能ならばtrueを返す。(dxを平均的な増加量とすると、両端の間にmodulo-dxと等しい距離を持つ)

coerce(other)

数値演算子用。(Rubyのマニュアルや書籍を参照)

NArrayに互換性のあるメソッド

VArrayは数値的な多次元配列なので、NArrayに含まれるほとんどのメソッドや演算子をサポートしています。ここで、それらのメソッドの名前を示します。それぞれの使用法については、NArrayのドキュメントを参照してください。

メイン関数

sqrt, exp, log, log10, log2, sin, cos, tan, sinh, cosh, tanh, asin, acos, atan, asinh, acosh, atanh, csc, sec, cot, csch, sech, coth, acsc, asec, acot, acsch, asech, acoth

バイナリ演算子

-, +, *, /, %, **, .add!, .sub!, .mul!, .div!, mod!, >, >=, <, <=, &, |, ^, .eq, .ne, .gt, .ge, .lt, .le, .and, .or, .xor, .not

単項演算子

~ - +

平均など

mean, sum, stddev, min, max, median

その他のメソッド

これらのメソッドはNArrayを返します。(VArrayではない)
all?, any?, none?, where, where2, floor, ceil, round, to_f, to_i, to_a