
	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[...] と同じだが、長さが１になった次元を落
			さず(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<max の一様なランダム値を生成。
				 using MT19337
    self.randomn		 平均0、分散1の正規分布のランダム値を生成。
				 (Box-Muller)
    NArray.srand([seed])	 乱数のシードを設定。
				 省略時は時刻から自動生成。

演算: 要素ごとにおこなう。
    a = NArray.float(3,3).indgen
    b = NArray.float(3,3).fill(10)
    c = a*b	# --> 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 のインスタンス。
