[統計解析ライブラリ for AS3] matrixパッケージ

行列関連のクラスのパッケージ

MathMatrixクラス: 行列計算クラス
2元配列(2階層の入れ子の配列)をベースとした、行列計算、行列操作を行うクラス。
多変量解析を行うために、行列の計算が必要になるため作成。

利用方法

var matrix1:Array = new Array([1, 2, 3], [4, 5, 6], [7, 8, 9]);
var matrix2:Array = new Array([11, 12, 13], [14, 15, 16], [17, 18, 19]);
var resultMatrix:Array = MathMatrix.add(matrix1, matrix2);

静的メソッドとして、以下の機能が利用可能。

行列計算メソッド

add(matrix1:Array, matrix2:Array):Array
行列同士の足し算。元の行列と掛ける行列の行列数が等しい必要がある。
sub(matrix1:Array, matrix2:Array):Array
行行列同士の引き算。元の行列と掛ける行列の行列数が等しい必要がある。
muliple(matrix1:Array, matrix2:Array):Array
行行列同士の掛け算。元の行列の列数と、掛ける行列の行数が等しい必要がある。
times(matrix:Array, n:Number):Array
行要素への掛け算。

行列操作メソッド

getTransposeMatrix(matrix:Array):Array
転置行列の取得。行と列を入れ替えた新しい行列を取得。
getInverseMatrix(matrix:Array):Array
正方行列の逆行列の計算。n×nの正方行列(正則行列)の逆行列を取得。
getUnitMatrix(matrix:Array):Array
単位行列の生成。n×nの要素が1、それ以外が0となる正方行列を取得。
getZeroMatrix(matrix:Array):Array
0行列の生成。要素がすべて0である、m×nの行列を取得。
getVarianceCovarianceMatrix(matrix:Array):Array
分散共分散行列の計算。要素間の共分散の行列を取得。
clone(matrix:Array):Array
行列の複製。 行列を複製した新しい行列を取得。

逆行列計算メソッド(privateでもよかったが、一応publicにしてみた)
(一部、nutsuさんのソースを参考にさせていただきました。)

getDeterminant(matrix:Array):Number
正方行列の行列式の計算。
getCofactor(matrix:Array):Number
余因子の計算。
getCofactorMatrix(matrix:Array):Array
余因子行列の計算。

行列判定メソッド

validateMatrix(matrix:Array):Boolean
行列の整合性の判定。2元配列の行数、列数がそれぞれ等しく、m×nの配列になっているかを判定。
isSquare(matrix:Array):Boolean
正方行列の判定。行列が正方行列であるかを判定。

その他

getMaxValue(matrix:Array, abs:Boolean):Number
要素の最大値:の取得。行列の中での最大値を取得。オプションで、絶対値による判定が可能。
getMinValue(matrix:Array, abs:Boolean):Number
要素の最小値の取得。行列の中での最小値を取得。オプションで、絶対値による判定が可能。
toCSV(matrix:Array):String
CSVデータの出力: 行を改行、列を「,(カンマ)」区切りの文字列として出力

MathObjectクラス: 行列オブジェクトクラス
MathMatrixクラスをベースに、データの保持機能を加えたクラス。
基本的なgetterはMathMatrixでの計算結果を出力するが、オブジェクトとしての独自のメソッドも作成。

計算処理の重複を防ぐため、コンストラクタでの計算結果を保持する。
標準のMatrixクラスが、アフィン変換用の2×2行列しか利用できないため、独自に作成。

使い方のサンプル

//コンストラクタに2元配列を指定してオブジェクトを生成
var matrix:MatrixObject = new MatrixObject(new Array([1, 2, 3], [4, 5, 6], [7, 8, 9]));
var transposeMatrix:Array = m.transpose;

//要素がすべてnullの10×10行列を作成
var emptyMatrix:MatrixObject = new MatrixObject();
emptyMatrix.create(10,10);
emptyMatrix.value = new Array([1, 2, 3], [4, 5, 6], [7, 8, 9]);

メソッド

create(m:uint, n:uint):Array
要素がnullのm×n行列を作成。
append(m:uint, n:uint)
元の行列valueにm行、n列を付加。

Leave a Reply