Ruby/NArray ver 0.5.9 (2006-08-09) by Masahiro TANAKA クラスメソッド: NArray.new(typecode, size, ...) 配列を生成する。要素は0で初期化。 NArray.byte(size,...) 1 byte unsigned integer NArray.sint(size,...) 2 byte signed integer NArray.int(size,...) 4 byte signed integer NArray.sfloat(size,...) single precision float NArray.float(size,...) double precision float NArray.scomplex(size,...) single precision complex NArray.complex(size,...) double precision complex NArray.object(size,...) Ruby object 以上要素は0またはnilで初期化。 NArray.to_na(array) NArrayに変換 NArray.to_na(string,type[,size,..]) NArray[...] NArray[1,5,10.0] #=> NArray.float(3):[1.0, 5.0, 10.0] NArray[1..10] #=> NArray.int(10):[1,2,3,4,5,6,7,8,9,10] クラス変数: CLASS_DIMENSION データとして扱われる次元。 NArrayは0。NVectorは1。NMatrixは2。 配列情報参照 self.dim 次元(インデックスの数)を返す。 self.rank 次元(インデックスの数)を返す。 self.shape 次元ごとのサイズを返す。 self.total 全要素数を返す。 インデックス参照 self[ dim0, dim1, ... ] -- インデックス引数に指定できるもの: 数値、範囲、配列、true, false -- インデックスの順序: FORTRAN 型 -- 添字引数が1つの場合、多次元配列はflattenされた1次元配列とみなされる。 例: a が 3x3 配列のとき、a[3] は a[0,1] の要素を指す。 a[ 1, 2, -1 ] 要素の取り出し。負数は最後から数える(-1が最後) 要素指定の次元は縮約される。 a[ 0..3, 4..1 ] 範囲取り出し。範囲の最後が最初より前ならば逆順になる。 a[ [1,4,2] ] インデックス配列。要素が[a[1],a[4],a[2]]のNArrayが返る。 a[] a.dup と同じ。 a[ 0, true ] a[0, 0..-1] と同じ。 a[ 0, false ] aが3次元のとき、a[0,true,true] と同じ。 省略された次元すべてにtrueを指定したのと同じ。 a[ mask ] マスキング. mask は長さが a と等しい byte 型 NArray. mask の各要素の値に応じて、a のそれぞ れは落される(0の場合)か、保持される(0以外の場合)。 例: a=NArray.float(2,2).indgen! p a[ a.lt 3 ] --> [ 0.0, 1.0, 2.0 ] (a.lt 3 は byte 型 NArray を返す) (同じことは a[ (a.lt 3).where ] でも出来る) -- self.slice(...) self[...] と同じだが、長さが1になった次元を落 さず(self[]は落す)、もとのランクを保つ。但し、 1次元インデックス付けとマスキングは例外([]と同 じ)。 インデックス代入。-- 取出しとほぼ同じルール。 a[ 1, 2, 3 ] = 1 a[ 0..3, 1..4, 2..5 ] = 2 a[ [1,3,2,4], true ] = 3 a[] = 4 a.fill!(4) と同じ。 a[0..2] = b[1..5] --> 要素数が異なるのでエラー。 a[1,2] = b[0..2,1..3] [1,2]を始点として代入。 a[0..2,0..3] = b[0..2,1] 繰り返し代入。 ( a[0,0]=b[0,1],..,a[0,3]=b[0,1] ) 値のセット。 self.indgen!([start[,step]]) startからstepづつ増加した値をセット。 self.fill!(value) すべての要素にvalueをセット。 self.random!(max) 0<=x NArray.float(3,3) a = NArray.float(3,1).indgen b = NArray.float(1,3).fill(10) c = a*b # --> NArray.float(3,3) -- size=1の次元は拡張する。 算術演算子 -self self + other self - other self * other self / other self % other self ** other self.abs self.add! other self.sbt! other self.mul! other self.div! other self.mod! other self.mul_add(other,dim,...) (self * other).sum(dim,...)とほぼ同じ。 ただし途中で配列を作らない。 ビット演算子(整数のみ可能) ~self self & other self | other self ^ other 比較 -- 要素ごとに値を比較し、結果をBYTE型 NArrayを返す。 true/falseでないことに注意。 self.eq other ( ver 0.5.4 以降、== 演算子は廃止しました。) self.ne other self.gt other self > other self.ge other self >= other self.lt other self < other self.le other self <= other self.and other 要素ごとの条件比較。 self.or other self.xor other self.not other self.all? 要素がすべて真ならば真。 self.any? 要素のどれかが真ならば真。 self.none? 要素のどれかが真ならば真。 self.where 要素が真のインデックス配列を返す。 self.where2 要素が真と偽のインデックス配列を含む(Ruby)配列を返す。 例: idx_t,idx_f = (a>12).where2 統計 self.sum(dim,..) 指定した次元の和。 self.mean(dim,..) 指定した次元の平均。 self.stddev(dim,..) 指定した次元の標準偏差。 self.min(dim,..) 指定した次元の最小。 self.max(dim,..) 指定した次元の最大。 (省略時は全ての次元。Range指定可。) self.median(dim) 0..dimの次元の中央値。省略時はすべての次元。 ソート self.sort(dim) 0..dimの次元でソート。省略時はすべての次元。 self.sort_index(dim) ソートしたインデックスを返す。 self[self.sort_index] は self.sort と同等。 転置 self.transpose( dim0, dim1, .. ) 配列の転置。selfの第(dim0)次元が新しい配列の第0次元になる。 負数は後からの順番。 transpose(-1,1..-2,0) で最初と最後を入れ換え。 インデックスの変更 (要素数は不変) self.reshape!(size,...) self.shape= size,... self.newdim!(dim,...) 指定位置にサイズ1の次元を挿入する。 データの参照 self.refer selfのデータを参照する別のオブジェクトを作成。 self.reshape(size,...) self.refer.reshape! と同様。 self.newdim(dim,...) self.refer.newdim! と同様。 型変換 self.floor selfより小さい最大の整数を返す。 self.ceil selfより大きい最小の整数を返す。 self.round selfにもっとも近い整数を返す。 self.to_f 値を浮動小数点数に変換する。 self.to_i 値を整数に変換する。 self.to_a 値をRubyの配列に変換する。 self.to_s バイナリデータをそのままRubyの文字列データに変換する。 self.to_string 各要素を文字列に変換する。 イテレータ self.each {|i| ...} self.collect {|i| ...} self.collect! {|i| ...} バイトスワップ self.swap_byte バイトスワップ self.hton ネットワークバイトオーダーに変換 self.ntoh self.htov VAXバイトオーダーに変換 self.vtoh Boolean / マスク関係 self.count_false 値 == 0 の要素数 (byte, sint, int のみ) self.count_true 値 == 1 の要素数 (byte, sint, int のみ) self.mask( mask ) self[ mask ] と同じだかマスキング専用. [] と違い int, sint のマスクも使える. 複素数 self.real self.imag self.conj self.angle atan2(self.imag, self.real) self.imag= other 虚数部分にotherをセット。 self.im 虚数倍。 NMath モジュール sqrt(x) exp(x) log(x) log10(x) log2(x) atan2(x,y) sin,cos,tan sinh,cosh,tanh asin,acos,atan asinh,acosh,atanh csc,sec,cot csch,sech,coth acsc,asec,acot acsch,asech,acoth covariance FFTW モジュール (fftw-2.1.3をshared libでコンパイルしたもので確認) (別モジュール) fftw(x,[1|-1]) convol(a,b) FFTWを用いた畳み込み。 NMatrix NArrayのサブクラス。最初の2次元をMatrixとして用いる。 残りの次元は多次元配列として扱われる。 次元の順序は、数学での表記とは逆: a_ij => a[j,i] メソッド: +,- 相手が NMatrix のときに演算可。 * 相手が NMatrix または NVector のときは Matrix積。 相手が Numeric または NArray のときは Scalar積。 例: NMatrix[[1,2],[3,4]] * [1,10] == NMatrix[ [[1,2],[3,4]], [[10,20],[30,40]] ] / 相手が Numeric または NArray のときはScalar除算。 相手が square NMatrix のときはLUにより線形方程式を解く。 a/b == b.lu.solve(a) transpose 引数を省略した場合は、最初のMatrix次元を交換。 diagonal(other) diagonal!(other) 対角要素に値をセット。引数省略時は1をセット。 I 対角要素に値に1をセット。 inverse 逆行列 lu LU分解を計算。NMatrixLU クラスのインスタンスを返す。 NVector NArrayのサブクラス。最初の1次元をVectorとして用いる。 残りの次元は多次元配列として扱われる。 メソッド: +,- 相手が NVector のときに演算可。 * 相手が NMatrix のときは Matrix積。 相手が NVector のときは 内積。 相手が Numeric または NArray のときは Scalar積。 / 相手が Numeric または NArray のときは Scalar除算。 相手が square NMatrix のときはLUにより線形方程式を解く。 v/m == m.lu.solve(v) NMatrixLU NMatrix#lu メソッドにより作られる。 LU (NMatrix) と pivot (NVector) を含む。 メソッド: solve(other) LU分解の結果を使って other を解く。 other は NMatrix または NVector のインスタンス。