[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000747] NumArray vs NArray



堀之内です。

機能面でざっと NArray と NumArray の比較を行ってみました。
間違いとかあったら指摘してください > 川那辺君 (中間発表後でOK)

# NArray の発展速度のほうが速いかな

-----------------------------------------------------------------

		      NArray と NumArray の比較

			    2001/07 堀之内
	     ** Based on NArray-0.5.4 and NumArray-0.4 **


● NArray と NumArray の同種のメソッドで振る舞いが違うもの

[] メソッドで、長さ1になる次元が出来たとき NumArray は残すが、
NArray は残さない。しかし、NArray は slice というメソッドで、残すよう
にも出来る。 --- NArray の仕様のほうが好ましい。
NArray の [] は、NumArray では [].trim に等しい。

● math モジュールの扱い

NArray は独自の NMath で Math を置き換える

NumArray は math 関数をメソッド化しており、Math モジュールはいじらない。

今後組み込み Math モジュールに rescure が導入されれば、後者のほうが良
かろう。(ただし、要クラスメソッド化)

● サポートする型

一方のみにあるのに ○

NArray: 
     ○	byte(unsigned int*1)
     ○	int*2
	int*4
     ○	single float (4byte)
	double float (8byte)
     ○	single complex
	double complex
     ○	Ruby object   --- 要するに Array の多次元版か?

NumArray:
     ○	boolean(1 bit)   --- NArray では整数 (特に byte) がこれに用いられる
	int*4
	double
	double complex

● 気づいた点 

NArray では複素のメソッド名が、Complex型のそれと一致しないのが多い。
(つまりユーザーはスカラーか配列かを区別してプログラムを書く必要がある)
一方、NumArray では、組み込みの Complex を使わず C で書いた独自の 
Complex を使う。デフォルトを変えるという意味では受け入れられにくいが、
組み込みの Complex はあまり好ましくないので、組み込みもそれで置き換わ
れば良いだろう。

NArray の要素別比較演算はメソッドと演算子と両方でできる。
NumArray はメソッドのみ。個人的には後者のほうがいいと思う。
ただし、NumArray は比較演算子を再定義していないので、現状では
NumArray のほうがいいということはない。

● NArray になくて NumArray にある機能

* [] メソッドの引数のバリエーション

mask, {range,step}

* 幾つかの統計計算

  variance とか (お互い他に追い付くのは容易)

* 任意の長さの次元挿入 (NArrayは長さ1のみ)

* 長さ1の次元の trimming

● NumArray になくて NArray にある機能

* [] メソッドの引数のバリエーション

  false によるラバー次元 (NumArrayではラバー次元とその拡張の導入が以前
  から計画されているがまだ。拡張まで出来れば NumArray のほうが良い)

  すべての配列を1次元扱いできる。(これは IDL に引きずられ過ぎ。where関
  数でなく mask 対応が出来れば実質要らないと思われる)

* 乱数

* 効率を重視した += (等)に相当する add! (等)。

* bitwise演算子、そのほか 、any?, all? 等の論理演算

* 幾つかの統計計算

  median (お互い他に追い付くのは容易)

* sort

* "refer" --- pointer 共有の変則 shallow clone。効率を上げるためにはあっ
              ても悪くない

* イレテーター

* byteスワップ

* FFTW のサポート (FFTWがインストールされていれば使える)

* NMatrix, NVector サブクラスが存在する

  行列としての掛け算、ベクトルの内積等が取れるようになっている。
  また。LU分解が出来る(LAPACK等の総合的な線形代数パッケージ
  のラッパーは、今はないがるびきち氏が作ろうとしている)