Matrix
クラス · 行列の四則演算・行列式・累乗・転置
template <class T>
struct Matrix;
概要
行列の四則演算・行列式・累乗・転置
テンプレートパラメータ
| 名前 | 説明 |
|---|---|
T |
要素の型 |
計算量
- $r\times c$ 行列の加減算・転置は $O(rc)$、行列積は $O(rck)$。$n\times n$ 行列の行列式は $O(n^3)$、k乗は $O(n^3\log k)$
構築・破棄
| 名前 | 説明 | 計算量 |
|---|---|---|
(constructor) |
(1) 空の行列を作る (2) x 行 x 列の零行列を作る(3) x 行 y 列の零行列を作る(4) 二次元配列 _v をコピーして行列を作る |
(1) $O(1)$ (2) $O(x^2)$ (3) $O(xy)$ (4) $O(rc)$ |
メンバ関数
| 名前 | 説明 | 計算量 |
|---|---|---|
begin |
(1) 先頭行を指す読み取り専用イテレータを返す (2) 先頭行を指すイテレータを返す |
$O(1)$ |
end |
(1) 行列の終端を指す読み取り専用イテレータを返す (2) 行列の終端を指すイテレータを返す |
$O(1)$ |
det |
正方行列の行列式を返す | $O(n^3)$ |
pow |
正方行列の k 乗を返す |
$O(n^3\log k)$ |
unit_matrix |
正方行列を単位行列に変更する | $O(n^2)$ |
transposed |
転置行列を返す | $O(rc)$ |
print_debug |
行列の全要素を標準エラー出力へ表示する | $O(rc)$ |
演算子
| 名前 | 説明 | 計算量 |
|---|---|---|
operator[] |
(1) i 行目を読み取り専用で返す(2) i 行目を返す |
$O(1)$ |
operator+= |
同じ大きさの行列 rhs を要素ごとに加算する |
$O(rc)$ |
operator-= |
同じ大きさの行列 rhs を要素ごとに減算する |
$O(rc)$ |
operator*= |
行列 rhs を右から乗算する |
左辺を $r\times k$、右辺を $k\times c$ として $O(rkc)$ |
operator- |
(1) 全要素の符号を反転した行列を返す (2) 行列差を返す |
$O(rc)$ |
operator+ |
行列和を返す | $O(rc)$ |
operator* |
(1) 行列積を返す (2) 列ベクトル rhs を右から掛けた結果を返す |
(1) 左辺を $r\times k$、右辺を $k\times c$ として $O(rkc)$ (2) $O(rc)$ |
メンバの詳細
(constructor)
// (1)
Matrix() = default;
// (2)
Matrix(int x);
// (3)
Matrix(int x, int y);
// (4)
Matrix(const std::vector<std::vector<T>> &_v);
(1) 空の行列を作る
- 計算量: $O(1)$
(2) x 行 x 列の零行列を作る
- 計算量: $O(x^2)$
(3) x 行 y 列の零行列を作る
- 計算量: $O(xy)$
(4) 二次元配列 _v をコピーして行列を作る
- 計算量: $O(rc)$
begin
// (1)
const auto begin() const;
// (2)
auto begin();
(1) 先頭行を指す読み取り専用イテレータを返す
- 計算量: $O(1)$
(2) 先頭行を指すイテレータを返す
- 計算量: $O(1)$
end
// (1)
const auto end() const;
// (2)
auto end();
(1) 行列の終端を指す読み取り専用イテレータを返す
- 計算量: $O(1)$
(2) 行列の終端を指すイテレータを返す
- 計算量: $O(1)$
operator[]
// (1)
const auto &operator[](int i) const;
// (2)
auto &operator[](int i);
(1) i 行目を読み取り専用で返す
- 計算量: $O(1)$
(2) i 行目を返す
- 計算量: $O(1)$
operator-
// (1)
Matrix operator-() const;
// (2)
Matrix operator-(const Matrix &rhs) const;
(1) 全要素の符号を反転した行列を返す
- 計算量: $O(rc)$
(2) 行列差を返す
- 計算量: $O(rc)$
operator*
// (1)
Matrix operator*(const Matrix &rhs) const;
// (2)
std::vector<T> operator*(const std::vector<T> &rhs);
(1) 行列積を返す
- 計算量: 左辺を $r\times k$、右辺を $k\times c$ として $O(rkc)$
(2) 列ベクトル rhs を右から掛けた結果を返す
- 計算量: $O(rc)$