第4章 ベクトルと行列 駆け足で読む『離散数学〜コンピュータサイエンスの基礎数学』
本駆け足シリーズの全体の目次はこちら
- ベクトル vector と行列 matrix と集合 set
データは添数付き集合の型に並べて扱われることが多い。添数付きデータ型は配列と呼ばれたり、1次元の配列と2次元、またはそれ以上の配列を区別して、ベクトル(1次元)、行列(2次元)、多次元行列と呼び分けたりする
- ベクトル
n個の成分を持つリスト
すべての成分が0のベクトルを零ベクトル zero vector と呼ぶ。2つのベクトルがあり、要素数が等しく、対応する要素同士がすべて等しいとき、その2つのベクトルは等しい equal と言う,
成分の個数が等しい2つのベクトルには和 sum が定義され、それはと表さる。との各成分の和が和ベクトルの成分に等しい
ベクトルには2種類の積 product スカラー積とベクトル積が定義される。スカラー積とは、ベクトルの各成分にある値 をかけてできる値を成分としてもつベクトルである。ベクトル積には内積 dot product, inner product と外積 outer product がある。外積は行列になるので、後述することとする。内積は、成分数の等しいベクトル間に定義され、それは、対応する成分の積の和と定義される。その値はスカラーである。内積は、1行N列の行ベクトルとN行1列の列ベクトルの積、ともいえる。あるベクトルと自身との内積はゼロ以上であり、その平方根をノルム norm または長さ length と呼ぶ。ノルムがゼロのベクトルは零ベクトルである。
- 行列
行列は、N行M列の矩形の数値配列である。行 row (縦) 列 column (横)で、M個の列ベクトルの並びともN個の行ベクトルの並びともみなせる。第i行j列の成分をij-成分 ij-entryと呼ぶ。
N行M列の行列について、NxMを行列のサイズ size と定義する。サイズの等しい2つの行列があって、そのすべての成分が等しいとき、その行列は等しい equal と言う。成分のすべてが零の行列は零行列 zero matrixと呼ばれる。
サイズの等しい行列には和が定義される。行列の和は、ij-成分の和を成分とする行列のことである。行列にはスカラー積も定義される。それは、各成分をスカラー倍したものである。特にスカラーとして-1をかけてできる行列を負行列 negative of matrix と呼ぶ
行列の積には行列積が定義される。NxP行列にPxM行列かける場合に定義される。
転置行列。NxM行列の転置行列はMxN行列である。ij-成分の値をji-成分の値としたもののことである
- 正方行列
- 列数と行数が等しい行列を特に正方行列と呼び、NxN行列の場合に、位数 N, order N からなると言われるとともに、N次正方行列 n-square matrix と読まれる。正方行列においては、ii-成分を特に、主対角成分 main diagonal, または簡単に 対角成分 diagonal と呼ぶ。
- 正方行列の演算。スカラーは、1x1の正方行列であるとみなし、スカラーでの諸定義(和・べき・多項式)を正方行列に拡張することができる。スカラー 1 に相当するのは、単位行列 unit matrix である。これは、主対角成分がすべて1でそれ以外の成分がすべて0であうような行列である。スカラー 0 に相当するのは零行列。スカラーの和は対応する行列成分同士の和を成分とする行列を作ることで、行列のべきは自身の行列の積とその回数で定義し、であるものとすることで、スカラーの0乗が1であることと対応させる。こうすることで、スカラーに定義される多項式関数を行列Aにあてはめ、とする。スカラーについてを満足するようなを多項式の零点 zero または根 root と呼ぶが、これと同様に、を満足するような行列Aを多項式の零点 根と呼ぶ
- プログラミング問題
- データの格納はテンソルで行うことで拡張性・一般性を確保する。テンソルデータは後述(補足)の通り、総データ数が、で、それが、階数の添字で表される。Tensorオブジェクトがもつべき情報は、(1) 階数 (スカラー)(2) 次数(階ごとに次数が変わる) (ベクトル(長さは階数)(3) データ(総データ数は上述の通り) (ベクトル、長さは総データ数) (4) 添字管理リスト(2次元リスト、データの通し番号と、それに対応する階数分の添字の値(ただし、(4)は冗長情報、つまりデータの通し番号から添字は算出可能であるし、添字の値のセットから通し番号は計算できる)
- スカラー倍はテンソルの全要素のスカラー倍をする->ProdSchalarTensor
- 同じ階数・同じ次数のテンソル同士には和があって、対応要素を足し合わせる->SumTensor
- dot productは、同次数のベクトル同士に定義できて、スカラーが返る。これは関数テンソルになっている->DotProductTensor
- ベクトルの長さは、ベクトルとそれ自身との内積であるので、DotProductTensorを用いて計算できる->NormVector
- 行列式はn次正方行列について定義される->DeterminantMatrix
- ->次数nについて、順列の項の和になる。個々の項は、1-nまでの昇順整列と順列から作られる整数のペアについて、をの積に、この順列のpermutation symbolをかけたものの和となっている
- 2次正方行列の逆行列->Inverse2
public class Tensor {
int rank;
int[] dimension;
double[] data;
int[][] index;public static void main(String[] args) {
//Create Tensor Object and print out its features
System.out.println("Tensor object is consisted of int rank, int[] dimension, double[] data" +
" and int[][] index");
int rank_ = 3;
int[] dim = {5,3,4};
int numdata_ = 1;
for(int i=0;i<rank_;i++){
numdata_*=dim[i];
}
double[] data_ = new double[numdata_];
for(int i=0;i<data_.length;i++){
data_[i]=i;
}
Tensor t = new Tensor(rank_,dim,data_);
PrintTensor(t,"\t","\n");
//Pick up element of tensor with indices
int[] s ={4,1,2};
System.out.println("Tensor t's elemen t_4,1,2 is");
PrintChoiceElem(t,s);
//schalar
System.out.println("\n