Ruby/NArray ver 0.6.0.7 (2013-02-01) 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.delete_at(...) 引数はインデクス参照と同じ。 参照: https://github.com/masa16/narray/issues/5 値のセット。 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 ( == とは異なることに注意) 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 同値性 NArray[1] == NArray[1] #=> true NArray[1] == NArray[1.0] #=> true NArray[1].eql? NArray[1] #=> true NArray[1].eql? NArray[1.0] #=> false NArray[1].equal? NArray[1] #=> false a=b=NArray[1]; a.equal? b #=> true 統計 self.sum(dim,..) 指定した次元の和 self.cumsum 累積和(1次元配列のみ) self.prod(dim,..) 指定した次元の積 self.cumprod 累積積(1次元配列のみ) self.mean(dim,..) 指定した次元の平均。 self.stddev(dim,..) 指定した次元の標準偏差(標本標準偏差)。 self.rms(dim,..) 指定した次元のroot mean square。 self.rmsdev(dim,..) 指定した次元のroot mean square deviation。 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.reverse([dim,...]) 指定した次元を逆順にする self.rot90([k]) 2次元配列の90度の回転をk回行う 型変換 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型のみ) self.count_true 値 == 1 の要素数 (byte型のみ) self.mask( mask ) self[ mask ] と同じだかマスキング専用. [] と違い int, sint のマスクも使える. 複素数 self.real self.imag self.conj 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 のインスタンス。