[統計解析ライブラリ 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列を付加。