
	Ruby/NArray  ver 0.5.6 (2001-03-25)	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	    全要素数を返す。

インデックス取り出し。
  -- インデックス引数に指定できるもの:  数値、範囲、配列、true, false
  -- インデックスの順序:		FORTRAN 型

    a[ 1, 2, -1 ]	要素の取り出し。負数は最後から数える(-1が最後)
			要素指定の次元は縮約される。
    a[ 0..3, 4..1 ]	範囲取り出し。範囲の最後が最初より前ならば、反転。
    a[ [1,3,2,4] ]	配列の要素をインデックスとして取り出す。
			aが多次元かつ[]の中の引数が1個の場合、
			aは1次元配列とみなしてアクセスする。
    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 ] でも出来る)

  -- 次元が2以上の配列に対して [ ] の中で1個の引数を指定したとき、
     配列を1次元にflattenしたものとみなしてアクセスする。
     例: a が 3x3 配列のとき、a[3] は a[0,1] の要素を指す。

  -- 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.indgen!([start[,step]]) startからstepづつ増加した値をセット。
    self.fill!(value)		 すべての要素にvalueをセット。
    self.random!(max)	 0<=x<max の一様なランダム値を生成。
    self.randomn	 平均0、分散1の正規分布のランダム値を生成。
			 (Box-Muller)

演算: 要素ごとにおこなう。
    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  ( 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 のインスタンス。
