Matrix
命令
斜体は未実装
初期化
Matrix(row_size, column_size);
row_size行、column_size列の行列を生成します。
Matrix matrix(row_size, column_size);
要素アクセス
要素番号は1から始まります。10行の行列では添え字は1〜10が有効です。
- double& operator()(int row, int column)
- row行、column列の要素にアクセスします。参照と代入が可能です。
double d = matrix(row, column); matrix(row, col) = d;
Interval row, col; matrix(1<=row<10, 2<col<4) = 10;
演算子
- matrix + Matrix
- matrix - Matrix
- matrix * Matrix
- 行列同士の演算を行います。行列のサイズはそれぞれ適切なものである必要があります。行列による除算は未定義です。
- matrix + double
- matrix - double
- matrix * double
- matrix / double
- 行列の各要素に対して実数を加減乗除します。
Matrixに対する演算子は内部的にはExpression Templateを採用しております。
変形関数
- matrix.transpose()
- 転置行列を作成して返します。自身を転置するには以下のコードで実行します。
matrix = matrix.transepose()
- Matrix& slide(int drow, int dcol)
- 行、列を指定した要素数だけずらします。
0 1 2 3 4 5
mtx.slide(1,0)
2 0 1 5 3 4
- Matrix& rot90(int times=1)
- 90度回転します。引数に2を指定すると180度回転、3を指定すると270度回転します。
0 1 2 3 4 5
mtx.rot90(1)
3 0 4 1 5 2
- Matrix& reshape(int rows, int cols)
- 行数と列数の異なる別の行列として再解釈します。この関数を実行する前後で要素数が変わってはいけません。
0 1 2 3 4 5
mtx.reshape(2,3)
0 1 2 3 4 5
mtx =
0 1 2 3 4 5
mtx2 =
6 7 8
mtx.catRow(mtx2) mtx =
0 1 2 3 4 5 6 7 8
その他の関数
- int getRows()
- 行数を返します。
- int getCols()
- 列数を返します。
meshgrid
x座標の値を列に入れた行列、y座標の値を行に入れた行列をそれぞれ作成し、その変数名をx, yと置いてそのまま計算式を書くと要素ごとにその計算式が適用された行列が得られるという、matlabで用いられるテクニックを再実装したもの。
コード例
Interval row, col; Matrix x = Matrix::mesh(5, 1<=col<=5); // colにx軸の数値範囲 Matrix y = Matrix::mesh(1<=row<=5, 5); // rowにy軸の数値範囲 std::cout << x << std::endl << std::endl << y; Matrix result = sin(x/5.0*PI) *~ sin(y/5.0*PI); // *~は要素同士の乗算 std::cout << std::endl << std::endl << result;
メッシュグリッドに対応している関数
- sin
- cos
- tan
- exp
- pow
- sqrt
概要
- 元はdouble。ほとんど変更なしに任意の元に変更可能だが、デフォルト指定がない。ImageはMatrix<int>で実装可能だが、今のところその機能がない。
- メモリ配置はいわゆる矩形型配列。
- Expression Templeteの技法を採用。一時オブジェクトをいちいち生成しない。またExpression Templete一時オブジェクトをMatrixとほとんど区別なく扱える。
- 内部アクセスはポインタベースで関数ベースではない。加算で80%の最適化、乗算で50%の最適化が完了。
- Matlabの行列演算機能の40%(当社比)を実装。
特性値
- 固有値、固有ベクトル
- ノルム
特殊関数
- double* getElementPtr()
- メモリ実体がしない場合0を返す。部分行列や計算途中式には適用不可。
キーワード:[Class] [Math]
参照:[開発メモ] [(逆引き) なんでも] [Version History (2005-2006)] [リファレンスマニュアル]