[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等の総合的な線形代数パッケージ
のラッパーは、今はないがるびきち氏が作ろうとしている)