|| ベクトルとか行列の話を一般化したもの
「線型性を持つ写像」や「数」の総称
スポンサーリンク
目次
スカラー「 0 階テンソルで表現可能な 0,1,2,10 とか」
ベクトル「 階テンソルで表現可能な (0,1),(1,0) とか」
行列「 2 階テンソルで表現可能なベクトルのベクトル」
線型空間「ベクトルを問題なく扱える保証」
線型性「ベクトルとか行列が持ってる線っぽい感じ」
線型独立「同一の次元じゃ説明できない」
基底「次元の個数を決めるための概念」
次元「線型独立なベクトルの個数が次元になる」
テンソル「多次元配列の感覚を抽象化したもの」
テンソル積「テンソルの定義で必要な都合の良い操作」
スカラー Scalar
|| 大きいとか小さいが分かるやつ
「数」というとこれをイメージする人が多いと思います
\begin{array}{cccccccccc} -1& 0& 1&2&3&4&5&6&7&8&9&10 \end{array}
ベクトルなんかを意識する時
この概念は考えることが多いです。
( 0 階テンソルの代表的な表現方法に当たる)
ベクトル Vector
|| スカラー値を並べたやつ
「並び順が決まってるスカラーのセット」のこと
\begin{array}{l} x,y &&→&&(1,2) \end{array}
「方向を持つ点」「組み合せ・セット」
こういう感覚を表現したものです。
行列 Matrix
|| 連立方程式を整理すると出てくるやつ
「ベクトル」の「ベクトル」みたいな感じ
\begin{array}{ccccr} ax+by &&→&& \displaystyle \left( \begin{array}{llllll} \displaystyle a&b \end{array} \right) \displaystyle \left( \begin{array}{llllll} \displaystyle x \\ y \end{array} \right) \\ \\ \displaystyle \left( \begin{array}{llllll} \displaystyle ax+by \\ cx+dy \end{array} \right)&&→&& \displaystyle \left( \begin{array}{llllll} \displaystyle a&b \\ c&d \end{array} \right) \displaystyle \left( \begin{array}{llllll} \displaystyle x \\ y \end{array} \right) \end{array}
一般形になりますが
\begin{array}{llllll} \displaystyle \left( \begin{array}{llllll} \displaystyle ax+by&av+bu \\ cx+dy&cv+du \end{array} \right)&&→&& \displaystyle \left( \begin{array}{llllll} \displaystyle a&b \\ c&d \end{array} \right) \displaystyle \left( \begin{array}{llllll} \displaystyle x & v \\ y & u \end{array} \right) \end{array}
要はこういう形の数が
\begin{array}{llllll} \displaystyle \left( \begin{array}{llllll} \displaystyle \vec{a_1} \\ \vec{a_2} \end{array} \right)&=&\displaystyle \left( \begin{array}{llllll} \displaystyle a_{11}&a_{12} \\ a_{21} & a_{22} \end{array} \right) \end{array}
「行列」と呼ばれるものになります。
(表現方法の1つという側面が強い)
行列の厳密な定義
「行列 \mathrm{Matrix} 」という概念は
『2変数写像 M 』で定義されていて
\begin{array}{ccc} M & : & \{ 1,...,n \} \times \{ 1,...,m \} &\to& A \\ \\ && (i,j) &\mapsto& a_{ij} \end{array}
その本質は
「添え字 i,j 」と「成分 a_{ij} 」の対応になります。
(写像あるいは写像を定義する集合が行列の定義)
線型空間 Linear Space
|| ベクトルの性質と使用条件をまとめたやつ
「ベクトル」を問題なく使うための保証
\begin{array}{cccccc} \displaystyle v,u,w&∈&V &&V \,\, \mathrm{is} \,\, \mathrm{Set \,\, of \,\, Vector} \\ \\ a,b&∈&S &&S \,\, \mathrm{is} \,\, \mathrm{Scalar \,\, Field} \end{array}
『扱う数のドメイン V,S 』と
\begin{array}{cccccccc} \displaystyle (v+u)+w&=&v+(u+w) &&\mathrm{Associative} \\ \\ v+u&=&u+v &&\mathrm{Commutative} \\ \\ \\ v+\vec{0}&=&v&&\mathrm{Identity} \\ \\ v+(-v)&=&0 &&\mathrm{Inverse} \\ \\ \\ a\times (b\times v)&=&(a\times b)\times v&&\mathrm{Associative} \\ \\ 1\times v&=&v&&\mathrm{Identity} \\ \\ \\ a\times (v+u)&=&a\times v+a\times u&&\mathrm{Distributive} \\ \\ (a+b)\times v&=&a\times v+b\times v&&\mathrm{Distributive} \end{array}
『満たすべき性質』で構成されています。
(これを満たさないものはベクトル空間ではない)
\begin{array}{llllll} \displaystyle (V,+,\times) \,\, \mathrm{is} \,\, \mathrm{Vector \,\, Space} \,\, \mathrm{on} \,\, S \end{array}
本題から逸れる上にテンソルの本質ではないので
この記事ではとりあえず飲み込んでください。
(詳細は線型空間の記事で扱います)
線型性 Linearity
|| 綺麗に並ぶ感じの性質
「加法」「斉次性」で定義されてます
\begin{array}{ccc} f(ax)&=&af(x) && 斉次性 \\ \\ f(x+y)&=&f(x)+f(y) && 加法性 \\ \\ f(ax+by)&=&af(x)+bf(y) && 線型性 \end{array}
一言で言うなら「内積の感覚」です。
(ベクトルの横並びの感覚の演算バージョン)
\begin{array}{lcl} ax+by &→&(a,b)(x,y) \\ \\ ax+by+cz &→&(a,b,c)(x,y,z) \end{array}
「多くのデータ」と +,\times を扱う時によく見る
\begin{array}{cccc} \displaystyle a_0 x^0 + a_1 x^1 + a_2 x^2 + \cdots + a_n x^n &=&0 \\ \\ x_1 p_1 + x_2 p_2 + x_3 p_3 + \cdots + x_np_n &=&E(X) \end{array}
こういう形のことを言ってます。
(見た目一直線だから線型)
線型独立 Linearly Independent
|| ベクトルが一直線上に無い感じ
「次元」を増やさないと説明できない状態
\begin{array}{ccccc} \displaystyle\sum_{k=1}^{n}c_kv_k=\vec{0} &&→&& c_1=c_2=\cdots=c_n=0 \end{array}
一般的にはこんな感じの「条件」のことを指します。
( v_n は零ベクトル \vec{0} ではないとします)
線形独立の具体的な感じ
一般形だと分かり辛いですが
\begin{array}{ccc} -2(0,1)+(0,2)&=&(0,0) \\ \\ -2(1,2)+(2,4)&=&(0,0) \end{array}
「平面」の話だと分かり易いと思います。
(こういうのが一直線上のもので線形独立じゃないやつ)
\begin{array}{ccccc} c_1(a_1,b_1)+c_2(a_2,b_2)=(0,0) &&→&& c_1=c_2=0 \end{array}
「線形独立なもの」は ↓ みたいな感じで
\begin{array}{rcr} (0,1)+(1,0)&=&(1,1) \\ \\ 0(0,1)+0(1,0)&=&0(1,1) \\ \\ c_1(0,1)+c_2(1,0)&=&(c_1,c_2) \end{array}
こういう『 c_1=c_2=0 以外では』
「どうあっても (0,0) にならない状態」を
\begin{array}{ccc} c_1≠0 &→& c_1(0,1)+c_2(1,0)≠(0,0) \\ \\ c_2≠0 &→& c_1(0,1)+c_2(1,0)≠(0,0) \end{array}
「線形独立」と言います。
(軸 X の数は他の軸 Y の数に作用しない感覚)
線型従属
そしてこの「線形独立ではない」ものには
\begin{array}{ccc} -2(0,1)+(0,2)&=&(0,0) \\ \\ -2(1,2)+(2,4)&=&(0,0) \end{array}
「1直線上」に存在するベクトルたちであることから
(どのベクトルも拡大縮小と平行移動で表現できる)
\begin{array}{ccccc} c_i≠0 &∧& \displaystyle\sum_{k=1}^{n}c_kv_k=\vec{0} \end{array}
「線型従属」なんて名前が付いています。
(この場合は次元が n に定まらず定義し辛い)
線形独立と線形従属の評価の対象
この辺り少しややこしいですが
「評価する対象」は『ベクトルの集合』になるので
\begin{array}{ccc} ベクトルの集合 & \left\{ \begin{array}{lcl} c_iが全部0の時だけ \vec{0} \\ \\ c_iが全部0じゃなくても \vec{0} \end{array} \right. \end{array}
「1つでも同一直線上にベクトルがある」場合
( a=nb だと c_1a-c_2nb=0 になる)
\begin{array}{ccc} (0,1),(0,2),(1,0) &&× \\ \\ (0,0,0),(1,0,0) &&× \end{array}
その『ベクトルの集合』は「線型従属」になります。
(つまり線形独立の条件はわりと厳しい)
基底 Basis
|| 次元の数を決めるもの
「線型独立」な「ベクトルの集まり」のこと
\begin{array}{ccccc} (0,1),(0,2) &&→&&\mathrm{Line} \\ \\ (0,1),(1,0) &&→&&\mathrm{Area} \end{array}
『テンソルの定義として都合が良い道具』で
\begin{array}{ccccc} \displaystyle\sum_{k=1}^{n}c_kv_k=\vec{0} &&→&& c_1=c_2=\cdots=c_n=0 \end{array}
特に「線形独立が分かり易い」『標準基底』は
\begin{array}{ccc} \{v_1,v_2,v_3,...,v_n\} \end{array}
「テンソルの本質」とも言えるものになります。
(実運用上のテンソルはだいたい標準基底を使う)
標準基底
これは簡単に説明するなら
要は『分かり易い線形独立な集合』のことで
\begin{array}{ccc} (a,b)&=&a(1,0)+b(0,1) \end{array}
このような「ものすごく単純な分解」から分かる
\begin{array}{ccc} \{ & (1,0) & (0,1) & \} \end{array}
こういう「基底」のことを「標準基底」と言います。
(要は垂直に交わる長さ 1 の縦と横の線)
補足しておくと
\begin{array}{ccc} (a,b,c)&=&\displaystyle \begin{array}{crc} & a(1,0,0) \\ \\ +&b(0,1,0) \\ \\ +&c(0,0,1) \end{array} \end{array}
「3次元の標準基底」は
\begin{array}{ccc} \{ & (1,0,0) & (0,1,0) & (0,0,1) & \} \end{array}
こんな感じになります。
(基底は基本的にはこれだけで説明できる)
基底と標準基底
「標準基底」の分かり易さから分かる通り
「基底」という概念は順番的にはこの一般化で

「直交(標準基底)」→「向きが違う(基底)」
こんな感じにして抽象的に定義した結果
\begin{array}{cc} \displaystyle\sum_{k=1}^{n}c_kv_k=\vec{0} &&→&& c_1=c_2=\cdots=c_n=0 \end{array}
「線型独立」のみでの定義になっています。
(これにより標準基底以外の基底で考えることが可能に)
正規直交基底
補足しておくと
\begin{array}{ccc} ||v||&=&1 \end{array}
『基底の定義』に追加する形で
\begin{array}{ccc} i≠j &→&v_i \cdot v_j=0 \end{array}
上記2つの条件を満たすものには
「正規直交基底」なんて名前が付いています。
(これの代表例が標準基底や基本ベクトル集合になる)
基底の厳密な定義
「基底」という概念は
「ベクトル空間 V 」に定義されていて
\begin{array}{ccc} v_1,v_2,...,v_n&\in&V \end{array}
「ベクトル空間になる」という条件が付いた
「 V の部分集合 V_{\mathrm{part}} 」に対し
\begin{array}{ccc} V_{\mathrm{part}}&⊂&V \end{array}
「 V_{\mathrm{part}} の全ての要素 v 」が
\begin{array}{ccccc} \displaystyle\sum_{k=1}^{n}c_kv_k=\vec{0} &&→&& c_1=c_2=\cdots=c_n=0 \end{array}
この「線型独立」を満たすベクトルの集まりと
\begin{array}{ccc} a_1,a_2,...,a_n &\in&R \end{array}
任意のスカラーで表現できる時
\begin{array}{ccc} a_1 v_1+a_2 v_2+\cdots + a_n v_n &=&v&\in&V_{\mathrm{part}} \end{array}
その「ベクトルの集まり」のことを『基底』と言います
(全体を表現可能な基礎的なベクトルの集まりが基底)
整理すると
\begin{array}{ccc} a_1 v_1+a_2 v_2+\cdots + a_n v_n &=&v \end{array}
「好きにスカラー a_n を定めれば」
「ベクトル空間の全ての要素 v 」を表現できる
(固定された空間を伸ばしたり回転させたりできる)
\begin{array}{ccc} \{ v_1,v_2,v_3,...,v_n \} \end{array}
そういう「線型独立」な「ベクトルの集合」が
「基底」の定義になります。
具体的な感じ
↑ だとちょっと抽象的なので捕捉しておくと
\begin{array}{ccccc} ( & 1 & 0 & 3 & ) \\ \\ ( & 2 & 0 & 9 & ) \\ \\ ( & 4 & 7 &2 & ) \end{array}
例えばこんな「基底」を考えた時
\begin{array}{ccc} \begin{array}{ccc} -2 & ( & 1 & 0 & 3 & ) \\ \\ & ( & 2 & 0 & 9 & ) \end{array} &\to& (0,0,3) \end{array}
こんな風に連立方程式的な整理をすれば
(やってることはそのまま連立方程式)
\begin{array}{lclcl} \displaystyle\frac{1}{3} \left( -2(1,0,3) + (2,0,9) \right) &=& (0,0,1) && ×a \\ \\ \displaystyle\frac{1}{2} \left( -9(0,0,1) + (2,0,9) \right) &=& (1,0,0) && ×b \\ \\ \displaystyle \frac{1}{7} \left( -4(1,0,0) -2(0,0,1) + (4,7,2) \right) &=& (0,1,0) && ×c \end{array}
「標準基底を作れる」って話で
\begin{array}{ccc} a(1,0,0)+b(0,1,0)+c(0,0,1) &=& (a,b,c) \end{array}
どの a,b,c にも対応する実数が存在する
これが ↑ の「基底の定義」の主張になります。
次元 Dimension
|| 線 → 面 → 立体 → 時空間 みたいな話
「基底(ベクトルの集合)」の「要素数」のこと
\begin{array}{ccc} \mathrm{Dim} \, V &=&n \end{array}
「基底の要素」である「ベクトル」が n 個なら
「次元」は必ず n になります。
より正確には
\begin{array}{lcl} 次元の感覚 &\to& 線じゃ説明できない \\ \\ &\to& ベクトルの言語では線形独立 \\ \\ &\to& 次元を線形独立で定義する \end{array}
「線型独立」がそのように定義されてるから
「基底の要素数」は「次元」に必ず一致します。
(これの詳細は長くなるので別の記事で)
テンソル Tensor
|| 多次元の配列でベクトルや行列を統一的に扱う感覚
『多次元配列の感覚』を「基底」で厳密に定義したもの
\begin{array}{c} \begin{array}{ccc} 0&1 \end{array}&→&a &→&a_{×}&&\mathrm{Scalar} \\ \\ \begin{pmatrix} 0&1 \end{pmatrix}&→& \begin{pmatrix} a_1&a_2 \end{pmatrix} &→& a_{i} && \mathrm{Vector} \\ \\ \begin{pmatrix} 1&0 \\ 0&1 \end{pmatrix} &→& \begin{pmatrix} a_{11}&a_{12} \\ a_{21}&a_{22} \end{pmatrix} &→&a_{ij} && \mathrm{Matrix} \end{array}
「スカラー」は「 0 階のテンソル」
「ベクトル」は「 1 階のテンソル」
「行列」は「 2 階のテンソル」で表現可能になります。
テンソルの見た目
厳密な定義では
「線形写像を持つ」という条件が付きますが
(この線形写像はテンソルの組み立て方に相当する)
\begin{array}{ccc} \mathrm{Image}&=& \begin{pmatrix} [\mathrm{00},\mathrm{00},\mathrm{00}] &[\mathrm{00},\mathrm{00},\mathrm{FF}] & [\mathrm{00},\mathrm{FF},\mathrm{FF}] \\ [\mathrm{FF},00,00] &[\mathrm{FF},\mathrm{FF},\mathrm{00}] & [\mathrm{FF},\mathrm{FF},\mathrm{FF}] \end{pmatrix} \end{array}
こういう「大量の値を1つの数としたもの(配列など)」が
『テンソルとして定義できるもの』で
\begin{array}{ccc} \mathrm{Image}[1][1]&=&[00,00,00] \\ \\ \mathrm{Image}[3][2]&=&[\mathrm{FF},\mathrm{FF},\mathrm{FF}] \end{array}
「テンソルの中身の1つ」もまた「テンソル」と呼ばれます。
(全体も見た目も組み立て方もテンソルと呼ばれる)
テンソルの役割
この「テンソル」という概念は
\begin{array}{ccc} f&:&T&→&T^{\prime} \end{array}
基本的には「一括処理」のために使われるもので
(全てが同一時間で動くとする場合とか)
\begin{array}{ccc} 2倍の大きさに拡大 \\ \\ \begin{array}{ccc} (0,1) & (1,1) \\ \\ (0,0) & (1,0) \end{array}×2 \end{array}
「一度に全ての座標を扱う」場面でよく使われます。
(画像の処理とか映像の処理とかでも使われる)
性質を保つテンソル
理論的な話としては
\begin{array}{lcl} \mathrm{Scalar}\times \mathrm{Scalar} & \overset{\times}{\to} & \mathrm{Vector} \\ \\ \mathrm{Scalar}\times \mathrm{Vector}& \overset{R\times R^2=R^3}{\to} & \mathrm{Vector} \\ \\ \mathrm{Vector}\otimes \mathrm{Vector}& \overset{\otimes}{\to} & \mathrm{Tensor} \\ \\ \mathrm{Tensor} \otimes \mathrm{Vector}& \overset{\otimes}{\to} & \mathrm{Tensor} \\ \\ \mathrm{Tensor} \otimes \mathrm{Tensor}& \overset{\otimes}{\to} & \mathrm{Tensor} \end{array}
「ベクトル空間の直積 \otimes 」→「テンソル」
「テンソルの積」→「テンソル」という感じに
\begin{array}{ccc} \mathrm{Tensor} \otimes \mathrm{Tensor} &\to& \mathrm{Tensor} \end{array}
「何度操作を繰り返しても」
「テンソルはテンソル」というような
\begin{array}{ccc} v\otimes u &\in& V\otimes V \end{array}
「閉じている」状態を作るという
「閉鎖性」の観点で使われることもあります。
(直積操作を制限するような感覚で使われる)
テンソル積は普遍性により定義される
↑ を実現する上で必要な
「テンソル積 \otimes 」という概念は
(これがテンソルの組み立て方に当たる操作)
\begin{array}{lclcl} T&=&c && \mathrm{Scalar} \\ \\ T_{i} &=&\displaystyle\sum_{i=1}^{n}c_{i} (e_i) && \mathrm{Vector} \\ \\ T_{ij} &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}c_{ij} (e_i\otimes e_j) && \mathrm{Matrix} \\ \\ T_{ijk} &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{l}c_{ijk} (e_i\otimes e_j \otimes e_k) && \mathrm{Tensor}\text{-}\mathrm{Rank}3 \end{array}
「基底」として定義できる
「ベクトル空間」の要素である「ベクトル v,u,w 」と
\begin{array}{lcl} (v+u)\otimes w &=& v\otimes w +u\otimes w \\ \\ v \otimes (u+w) &=& v\otimes u +v \otimes w \end{array}
「スカラー c (実数値)」を使うことにより
\begin{array}{ccccc} c(v\otimes u) &=& cv \otimes u &=& v\otimes cu \end{array}
まず「欲しい性質が先」に定義されて
その後に「具体的な操作」が定義されます。
(最初の段階では具体的な操作が決まっていない)
この『求められる性質が先』
というのが「普遍性」という概念の本質で
\begin{array}{lcl} 欲しい性質 &\to& 具体的な操作 \end{array}
『求められる性質』がまず決まっていて
そこから「操作」が考えられます。
\begin{array}{lcl} 良い感じの操作を作る &\to& 操作の性質を調べる \\ \\ &\to& 条件を満たすかどうか確認 \\ \\ &\to& 条件を満たすならテンソル積 \end{array}
ちょっと実感し辛いかもしれませんが
これが「テンソル積」の厳密な定義になります。
(テンソル積で普遍的な ↑ の性質は双線型性)
行列と2階テンソルの違い
この「テンソル」という概念と
「2階テンソル」で表現できる「行列」の明確な違いは
\begin{array}{ccc} 共変性 && 基底×10 &\to& 成分×10 &&空間を伸ばす \\ \\ 反変性 && \displaystyle 基底×\frac{1}{10} &\to&成分×10 &&単位を変える \end{array}
「テンソル」という概念が
「基底」と『性質』で定義されているのに対し
(直感的には組み立て方が明確な配列がテンソル)
「行列」がその辺り制限なく定義されている点で
(行列は成分を並べたものとして定義されている)
\begin{array}{ccc} \left( \begin{array}{ccc} 1&0 &0 \\ 0&1 &0 \\ 0&0&1 \end{array} \right) \end{array}
こちらは特に『性質』は要求されておらず
「数字を並べたもの」以上の意味を持ちません。
(組み立て方が定義されると2階のテンソルになる)
テンソルの厳密な定義
この「テンソル」には
「分野」によって分かれる複数の定義があるんですが
(直感的・物理学的・数学的な定義がそれぞれある)
\begin{array}{ccc} \mathrm{Vector}&→&\mathrm{Tensor} \end{array}
見た目は「ベクトル」を軸に定義されているので
(根本的にはベクトルの延長と捉えて良い)
\begin{array}{ccc} V\otimes V && \to && \mathrm{Tensor} \end{array}
まずはその辺りの話からしていきます。
(抽象的には数学的定義で統一できる)
基底によるベクトルの定義
まず「ベクトル」なんですが
\begin{array}{ccc} a\times b &→&(a,b) \end{array}
これは「スカラーの直積」によって得られるもので
\begin{array}{lcl} (a,b)&=&c_1e_1+c_2e_2 \\ \\ (a,b)&=&a(1,0)+b(0,1) \end{array}
「基底 \{e_1,e_2\} 」を使えば
このような形で表現できます。
(基本的には標準基底を考えればOK)
\begin{array}{ccc} (a,b)&=&c_1e_1+c_2e_2 \\ \\ (a_1,a_2,...,a_n)&=&\displaystyle\sum_{k=1}^{n}c_ke_k \end{array}
これは「中身のスカラー(成分)」が増えても同様で
\begin{array}{ccc} v_n&=&\displaystyle\sum_{k=1}^{n}c_ke_k \end{array}
あらゆる「ベクトル v 」は
このような形で「基底」により定義できます。
(テンソルはこの事実に基づいて定義される)
基底を増やしてみる
「スカラーの直積」で ↑ のようになるなら
「ベクトルの直積」ではどうなるのか
\begin{array}{ccc} a\times v_n &=& (a,v_n) \\ \\ v_n\times v_m&=& (v_n,v_m) \end{array}
これを「スカラーとベクトルの直積」と
「行列の成分表示」を参考にして
\begin{array}{lcc} \displaystyle \left( \begin{array}{ccc} c_{11}&c_{12}&c_{13} \\ c_{21}&c_{22}&c_{23} \\ c_{31}&c_{32}&c_{33} \end{array} \right) \\ \\ \displaystyle \left( \begin{array}{ccc} a_1b_1&a_1b_2&a_1b_3 \\ a_2b_1&a_2b_2&a_2b_3 \\ a_3b_1&a_3b_2&a_3b_3 \end{array} \right) &\to& \displaystyle \left( \begin{array}{ccc} a_1 \\ a_2 \\ a_3 \end{array} \right) \otimes \left( \begin{array}{ccc} b_1&b_2&b_3 \end{array} \right) \end{array}
良い感じになるよう考えた時
(この時点での \otimes は仮想的な都合の良い演算子)
\begin{array}{ccc} v_n\otimes v_m &=& \displaystyle \left( \sum_{i=1}^{n}a_ie_i \right)\otimes \left( \sum_{j=1}^{m}b_je_j \right) \\ \\ &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}a_ib_j (e_i\otimes e_j) \end{array}
「自然な拡張かもしれない」ものとして
『ベクトルの拡張のような操作』を考えることができて
(この時点じゃ \otimes についてのあれこれは曖昧)
\begin{array}{ccc} \displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}a_ib_j (e_i\otimes e_j) \end{array}
a_{i},b_j を「任意の定数」として書き直すと
\begin{array}{ccc}v_n\otimes v_m &=& \displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}c_{ij} (e_i\otimes e_j) \end{array}
こんな形で「ベクトルから行列を表現できる」
「基底で定義できる何か \otimes 」を考えることができます。
(これはこういう都合の良い操作だと考えて良いです)
行列のようなもの
整理すると
\begin{array}{ccc} \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) \otimes \left(\begin{array}{ccc} b_1&b_2&b_3 \end{array} \right) &=& \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right) \end{array}
このように「積 \otimes 」を定義した場合
e_i\otimes e_j
これが「行列を表現できる」とすると
(これは定義の前段階に来る要望)
\begin{array}{ccc} \mathrm{Vector} &&\mathrm{Matrix} \\ \\ i &→& ij \end{array}
「添え字が増えた意味」を
『良い感じに後付けできる』操作として
\begin{array}{ccc}v_n\otimes v_m &=& \displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}c_{ij} (e_i\otimes e_j) \end{array}
こんな形を考えることができ
(こうすると求めていた形になる 詳細は後述)
同様の手順を踏むと
\begin{array}{ccc}v_n\otimes v_m\otimes v_l &=& \displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{l}c_{ijk} (e_i\otimes e_j \otimes e_k) \end{array}
このような操作も考えることができます。
(この時点じゃ \otimes の中身はまだよく分からない)
これにより
「ベクトルを拡張した何か」を
\begin{array}{lclcl} T&=&c && \mathrm{Scalar} \\ \\ T_{i} &=&\displaystyle\sum_{i=1}^{n}c_{i} (e_i) && \mathrm{Vector} \\ \\ T_{ij} &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}c_{ij} (e_i\otimes e_j) && \mathrm{Matrix} \\ \\ T_{ijk} &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{l}c_{ijk} (e_i\otimes e_j \otimes e_k) && \mathrm{Tensor}\text{-}\mathrm{Rank}3 \end{array}
より一般化して考えることが可能になるので
\begin{array}{lcl} スカラーからベクトル &\to& 直積\times \\ \\ ベクトルから行列 &\to& 謎操作\otimes \\ \\ 行列からなにか &\to& \otimesで統一的に \end{array}
結果「直積」の自然な拡張を得ることができます。
(多次元配列の感覚で線形空間を扱えるようになる)
行列を並べたテンソル
↑ じゃイメージしにくいと思うので
\begin{array}{ccccc} \mathrm{Scalar},\mathrm{Scalar},... &&→ &&\mathrm{Vector} && \mathrm{Tensor}\text{-}\mathrm{Rank}1 \\ \\ \mathrm{Vector},\mathrm{Vector},... &&→ &&\mathrm{Matrix} && \mathrm{Tensor}\text{-}\mathrm{Rank}2 \end{array}
この流れと同様の手順で
\begin{array}{ccc} \mathrm{Matrix},\mathrm{Matrix},... &&→ && \mathrm{Tensor}\text{-}\mathrm{Rank}3 \end{array}
「行列を並べたもの」を作ってみると

\begin{array}{ccc} \textcolor{pink}{ \begin{pmatrix} c_{111}&c_{121} &c_{131} \\ c_{211}&c_{221} &c_{231} \\ c_{311}&c_{321} &c_{131} \end{pmatrix} } & \textcolor{steelblue}{ \begin{pmatrix} c_{112}&c_{122} &c_{132} \\ c_{212}&c_{222} &c_{232} \\ c_{312}&c_{322} &c_{132} \end{pmatrix} } & \textcolor{skyblue}{\begin{pmatrix} c_{113}&c_{123} &c_{133} \\ c_{213}&c_{223} &c_{233} \\ c_{313}&c_{323} &c_{133} \end{pmatrix} } \\ \\ \mathrm{front} & \mathrm{middle} & \mathrm{back} \end{array}
その形はこのようになります。
(具体的には行列の情報を日付ごとに並べるとか)
テンソルの和
「ベクトルの和」と同様
\begin{array}{ccc} (a_1,a_2)+(b_1,b_2)&=&(a_1+b_1,a_2+b_2) \\ \\ &↓ \\ \\ a_i+b_i &=&c_i \end{array}
テンソルを ↑ のように定義すると
「行列の和」の延長として
\begin{array}{ccc} \begin{pmatrix} a_{11}&a_{12} \\ a_{21}&a_{22} \end{pmatrix}+\begin{pmatrix} b_{11}&b_{12} \\ b_{21}&b_{22} \end{pmatrix}&=&\begin{pmatrix} a_{11}+b_{11}&a_{12}+b_{12} \\ a_{21}+b_{21}&a_{22}+b_{22} \end{pmatrix} \\ \\ &↓ \\ \\ a_{ij}+b_{ij}&=&c_{ij} \end{array}
「テンソルの和」の定義は
\begin{array}{lclcl} a_{ijk}&+&b_{ijk}&=&c_{ijk} \\ \\ a_{ijk\cdots}&+&b_{ijk\cdots}&=&c_{ijk\cdots} \end{array}
かなり直感的な形でシンプルに定義できます。
(正確にはこの和を実現できるよう定義されている)
テンソル積 Tensor Product
|| テンソルを構成するのに都合が良い操作
「ベクトルを拡張できる」『良い感じの積』
\begin{array}{ccc} \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) b_1 & \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) b_2 & \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) b_3 \\ \\ \mathrm{left} & \mathrm{middle} & \mathrm{right} \end{array}
「ベクトル同士」の「テンソル積」は
\begin{array}{ccc} \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) \otimes \left(\begin{array}{ccc} b_1&b_2&b_3 \end{array} \right) &=& \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right) \end{array}
「行列を得る操作」になって欲しい
\begin{array}{lcl} テンソル &\to& 多次元配列の感覚 \\ \\ &\to& ベクトルと行列を表現可能 \\ \\ &\to& スカラーの直積はベクトル \\ \\ &\to& ベクトルから行列を得る操作は曖昧 \\ \\ &\to& ベクトル\otimes ベクトルが行列になるとする \\ \\ &\to& \otimes でこれ以上の拡張が可能とする \end{array}
この「要請」から得られたのが「テンソル積」になります。
(具体的な中身はこれを実現するために後で決められる)
3 つ以上のベクトルとテンソル積
この操作を複数回行う場合
\begin{array}{ccc} a\otimes b \otimes c &=& (a\otimes b) \otimes c \end{array}
例えば 3 回行うなら
\begin{array}{ccc} \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right) \otimes \left(\begin{array}{ccc} c_1&c_2&c_3 \end{array} \right) \end{array}
これは 3×3×3 の形になり
\begin{array}{llcl} \mathrm{front} & T_{ij1} & & \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right)c_1 \\ \\ \mathrm{middle} & T_{ij2} & & \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right)c_2 \\ \\ \mathrm{back} & T_{ij3} & & \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right)c_3 \end{array}
それぞれこんな感じになります。
(成分は T_{ijk}=a_ib_jc_k になる)
テンソル積の由来と役割
これは『ベクトルを自然に拡張する』という
「拡張するような操作」という役割が先にあって
\begin{array}{ccc} \mathrm{Vector} &\to& \mathrm{Matrix} \end{array}
その結果として
\begin{array}{lcl} \begin{array}{lcl} e_1 &=& (1,0) \\ \\ e_2&=&(0,1) \end{array} &\to& \begin{array}{lcl} ae_1 &=& (a,0) \\ \\ be_2&=&(0,b) \end{array} \end{array}
「基底」の性質を利用する形になっています。
(基底はこれを実現する上で都合の良い道具だった)
\begin{array}{ccc} \left( \begin{array}{c} c_{11} & 0 \\ 0 & 0 \end{array} \right) + \left( \begin{array}{cc} 0 & c_{12} \\ 0 & 0 \end{array} \right) + \left( \begin{array}{cclrl} 0 & 0 \\ c_{21} & 0{} \end{array} \right) + \left( \begin{array}{cccc} 0 & 0 \\ 0 & c_{22} \end{array} \right) \end{array}
つまりこれは『要望を実現する手段』であって
\begin{array}{lcl} \displaystyle\left(\begin{array}{l} 1 \\ 1 \end{array} \right) \otimes \left(\begin{array}{ccc} 1&1 \end{array} \right) &=& \displaystyle \left( \begin{array}{ccc} 1 & 1 \\ 1 & 1 \end{array} \right) \\ \\ \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \end{array} \right) \otimes \left(\begin{array}{ccc} b_1&b_2 \end{array} \right) &=& \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 \\ a_2b_1 & a_2b_2 \end{array} \right) \end{array}
テンソルの本質とはあまり関係がありません。
(基底で定義するのが結果的に最も都合が良かった)
順序の整理
ちょっとややこしいのでまとめておくと
\begin{array}{lcl} ベクトル &\to& いろいろな操作 \\ \\ 行列 &\to& ベクトルと似たような操作 \\ \\ \\ 行列の積 &\to& ベクトルへ \\ \\ ベクトルの積 &\to& スカラーへ \\ \\ \\ 逆の操作は? &\to& スカラー→ベクトルは直積 \\ \\ &\to& ベクトル→行列はなんとなく \\ \\ &\to& 行列→?も定義できる? \\ \\ &\to& 配列を考えると具体的な形が見える \\ \\ &\to& 具体形を作れる\otimes を想定してみる \end{array}
『テンソルの発想』の順路はこのようになっているので
(テンソルを定義できるテンソル積の原型はこの時点で出現)
\begin{array}{lcl} スカラーから &\to& 直積でベクトルが作れる \\ \\ ベクトルから &\to& \otimes で行列を作れると考える \\ \\ 行列から &\to& \otimes で拡張できると考える \\ \\ \\ 拡張概念 &\to& 生成物をまとめてテンソルと呼ぶ \\ \\ &\to& \otimes をテンソル積と命名する \\ \\ &\to& テンソルが持つべき性質を整理 \\ \\ \\ &\to& 線形性が指標として浮き彫りになる \\ \\ &\to& テンソルへの要請をそのまま定義とする \\ \\ &\to& テンソル積もその要請で定義される \end{array}
『テンソルから』考えるとややこしくなります。
(本質は「線形性」指標のベクトルの拡張)
テンソル積の構成
↑ の発想順で観察できるように
これの役割は『直積の線形的な一般化』です。
\begin{array}{lclcl} a_{i}&+&b_{i}&=&c_{i} \\ \\ a_{ij}&+&b_{ij}&=&c_{ij} \\ \\ a_{ijk}&+&b_{ijk}&=&c_{ijk} \\ \\ a_{ijk\cdots}&+&b_{ijk\cdots}&=&c_{ijk\cdots} \end{array}
「行列」の形を参考にして
「テンソル」という拡張概念を定めるとして
\begin{array}{ccc} \left( \begin{array}{ccc} 1 \\ 1 \end{array} \right) \otimes \left( \begin{array}{ccc} 1 & 1 \end{array} \right) &\to& \left( \begin{array}{ccc} 1 & 1 \\ 1&1 \end{array} \right) \end{array}
これを実現する「都合の良い積 \otimes 」を考えると
(この時点ではあえてテンソル積と呼ばず話を進める)
\begin{array}{ccc} Ab_1 & Ab_2 & Ab_3 \\ \\ \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) b_1 & \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) b_2 & \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) b_3 \\ \\ \mathrm{left} & \mathrm{middle} & \mathrm{right} \end{array}
結果としてこのような形の「良い感じの積」が得られます。
(この時点ではベクトルから行列を得る操作)
根本的には標準基底が主役
↑ の話を見て分かる通り
\begin{array}{ccc} \left( \begin{array}{ccc} 1 \\ 1 \end{array} \right) \otimes \left( \begin{array}{ccc} 1 & 1 \end{array} \right) &\to& \left( \begin{array}{ccc} 1 & 1 \\ 1&1 \end{array} \right) \end{array}
「都合の良い積 \otimes 」の本質はここに集約されています。
(これが積 \otimes の定義における根本原理になる)
\begin{array}{ccc} \left( \begin{array}{ccc} 1 \\ 0 \end{array} \right) \otimes \left( \begin{array}{ccc} 1 & 0 \end{array} \right) &=& \left( \begin{array}{ccc} 1 & 0 \\ 0&0 \end{array} \right) \\ \\ \left( \begin{array}{ccc} 0 \\ 1 \end{array} \right) \otimes \left( \begin{array}{ccc} 0 & 1 \end{array} \right) &=& \left( \begin{array}{ccc} 0 & 0 \\ 0&1 \end{array} \right) \end{array}
「標準基底の組み合わせ」を用いれば
\begin{array}{ccc} \left( \begin{array}{ccc} 0\\ 1 \\ 0 \end{array} \right) \otimes \left( \begin{array}{ccc} 0&1 & 0 \end{array} \right) &=& \left( \begin{array}{ccc} 0&0 & 0 \\ 0&1&0 \\ 0&0&0 \end{array} \right) \end{array}
『任意の位置の成分を取り出せる』ことからも
(より正確にはこの単純な形がたまたま標準基底だった)
\begin{array}{ccc} \left( \begin{array}{ccc} a_1 \\ 0 \end{array} \right) \otimes \left( \begin{array}{ccc} b_1 & 0 \end{array} \right) &=& \left( \begin{array}{ccc} a_1b_1 & 0 \\ 0&0 \end{array} \right) \end{array}
「標準基底」で考えるというのは非常に合理的です。
(これを基礎と置くと良い感じになりそうだと予想できる)
一般化された定義
↑ は『テンソルの本質』であり
「実運用上の感覚に近い」話なんですが
\begin{array}{lcl} 配列の感覚 &\to& 単純なベクトルで表現 \\ \\ &\to& 単純なベクトルが標準基底 \\ \\ &\to& 標準基底に限らず一般化できる? \end{array}
『標準基底に依存しない』という
「使用範囲の拡大」を目的として
\begin{array}{lcl} 拡張の必要性 &\to& リーマン幾何学では必要 \\ \\ &\to& 標準基底を固定すると説明が困難 \\ \\ &\to& 標準基底の存在を固定したくない \\ \\ \\ 基底の存在定理 &\to& 範囲を全てのベクトル空間へ \\ \\ &\to& 基底で定義しても積操作は可能 \\ \\ &\to& 標準基底から基底へ一般化 \end{array}
「テンソル積」は『基底』にまで一般化されています。
(だいたいは配列で使うので標準基底で良い)
表現方法と成分のインデックス
また「テンソル積の厳密な定義」は
\begin{array}{lclcl} T&=&c && \mathrm{Scalar} \\ \\ T_{i} &=&\displaystyle\sum_{i=1}^{n}c_{i} (e_i) && \mathrm{Vector} \\ \\ T_{ij} &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}c_{ij} (e_i\otimes e_j) && \mathrm{Matrix} \\ \\ T_{ijk} &=&\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{l}c_{ijk} (e_i\otimes e_j \otimes e_k) && \mathrm{Tensor}\text{-}\mathrm{Rank}3 \end{array}
『位置』を意味する「添え字 i,j,k 」で
\begin{array}{ccc} \displaystyle\left(\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array} \right) \otimes \left(\begin{array}{ccc} b_1&b_2&b_3 \end{array} \right) &=& \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right) \end{array}
『座標的な感覚』から直接的に定義されていて
\begin{array}{llcl} \mathrm{front} & T_{ij1} & & \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right)c_1 \\ \\ \mathrm{middle} & T_{ij2} & & \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right)c_2 \\ \\ \mathrm{back} & T_{ij3} & & \displaystyle \left( \begin{array}{ccc} a_1b_1 & a_1b_2 & a_1b_3 \\ a_2b_1 & a_2b_2 & a_2b_3 \\ a_3b_1 & a_3b_2 & a_3b_3 \end{array} \right)c_3 \end{array}
これにより「成分の位置」は厳密に定義されています。
(ベクトルや行列や行列の並びは表現方法の1つ)
整理すると
「テンソル T 」という『多次元配列の抽象化概念』は
\begin{array}{ccc} テンソル && 添え字 && 成分 \\ \\ T &:& (i,j,k,...) &\to& \mathrm{Value} \end{array}
『添え字と値の全単射』として厳密に定義されています。
(添え字が具体的に決まると値が1つ決まる)
テンソルの要請的定義
「テンソルの定義」は
「普遍性」という言葉で誤魔化される部分ですが
\begin{array}{lcl} 背景整理 &\left\{ \begin{array}{ll} 空間 & ベクトル空間で線形性を保証 \\ \\ 道具 & テンソル積の実現に基底が最適 \end{array} \right. \end{array}
その実態は大まかにはこのようになっていて
(既存定義はここから説明するから意味不明)
\begin{array}{ccc} テンソルの本質 & \left\{ \begin{array}{ll} 感覚 & 添え字が多い多次元配列 \\ \\ 表現 & 標準基底でアドレス指定可 \\ \\ 運用 & パラメータ管理や一括処理 \end{array} \right. \end{array}
「テンソルのコア」となる定義はこのようになっています。
(背景整理はこれを成立させるための事後的な整理)
順番の整理
定義の順番をまとめると
\begin{array}{lcl} 拡張概念 &\to& ベクトルから行列を得る操作 \\ \\ &\to& 多次元配列の感覚 \\ \\ &\to& 表現できる単純なベクトルがある \\ \\ &\to& 単純なベクトルは標準基底とも呼べる \\ \\ \\ 一般化要請 &\to& リーマン幾何学の創出 \\ \\ &\to& 標準基底のみでは狭い \\ \\ &\to& 基底にまで範囲を拡張 \end{array}
まず「発想」から『テンソルへの要請』が得られて
\begin{array}{lcl} 基底の使用 &\to& 基底成立条件の整備 \\ \\ &\to& ベクトルが使える状態が必要 \\ \\ &\to& ベクトル空間を前提とする \end{array}
その「正当化のための背景」として
こういった「線形性」が現れています。
既存定義が難解な理由
これは ↑ の観察から分かる通り
\begin{array}{lcl} 複雑な理由 & \left\{ \begin{array}{lcl} 多次元配列 &\to& 源感覚が抽象的 \\ \\ 一般化要請 &\to& 抽象感覚が更に抽象化 \\ \\ 実現背景 &\to& 抽象的な背景で説明 \end{array} \right. \end{array}
「実体」が『具体的になり過ぎる』
(元が抽象的過ぎて具体例が具体的になり過ぎる)
\begin{array}{lclcl} 抽象的 && ちょっと具体的 && 具体的 \\ \\ 多次元配列 &\to& ベクトルや行列 &\to& 配列 \end{array}
これが難しくなっている大きな理由で
\begin{array}{lcl} 基底の使用許可 & \left\{ \begin{array}{ll} 自由ベクトル空間 & ベクトル使用許可 \\ \\ 商ベクトル空間 & ベクトル空間維持 \end{array} \right. \end{array}
これらが「正当化の背景」でありながら
(テンソルはこの上で成立する何かとする)
\begin{array}{ccc} 正当化背景 &\to& 添え字と成分の1対1対応 \\ \\ 基底 &\to& T_{ijk...} \end{array}
『前面に出てしまっている』点も原因としては大きいです。
(これらは「数理的に扱える保証」であって本質ではない)
