線形変換とは?誰でも必ず理解できるようにアニメーションで解説

線形変換(線型写像)とは、簡単に表現すると「行列によって空間(線形空間)を変形させること」です。具体的には、以下に用意した線形変換のアニメーションをご覧ください。これだけで線形変換がどういうものであるかが一目でわかります。

いかがでしょうか。これが線形変換です。

線形変換は線形代数におけるメインのトピックであり、もっとも面白いところでもあります。このページでは、この線形変換について誰でもわかるように解説していきます。

ぜひ楽しみながら読み進めていただければと思います。

先に読んでおきたいページ
線形変換を理解するには、ベクトルと行列の積の理解が必要不可欠です。『ベクトルと行列の積とは何か?計算方法と幾何学的な意味を徹底解説』で解説していますので、ぜひ確認してみてください。

目次

1. 線形変換とは

ここでは、「線形変換とは何か」ということについて、「線形」の意味と「変換」の意味とに分解して、小難しい数式は使わずに、誰でもイメージ正確に理解できるように、詳しく解説していきます。

1.1. 変換とは何か?

「変換」という言葉は、単純にベクトルと行列の積を表しています。

ベクトルと行列の積とは何か?計算方法と幾何学的な意味を徹底解説』で解説しているように、ベクトルと行列の積において、行列とは入力したベクトルを別のベクトルに変換して出力する関数のようなものです。

そして線形代数では、この「関数」を専門用語で「写像」と言います。つまり変換は関数と同じ意味の言葉です。

それではなぜ「関数」という言葉を使わずに、わざわざ「変換」という言葉を使っているのでしょうか?これにはもちろん理由があります。

「関数」というと、単に入力値に対して新たな値を出力することをイメージします。しかし「変換」という言葉には、それだけでなく、以下のアニメーションで示しているように、入力したベクトルが出力されるベクトルの方に変化する・・・・というニュアンスがあるのです。

このように「変換」という言葉は「ベクトルを行列に入力したら、そのベクトルが新しく出力されるベクトルに変化する」ということを意味しています。

以上が「変換」の意味です。

1.2. 線形とは何か?

それでは線形変換の「線形」とはどういう意味でしょうか?

上のアニメーションでは、理解を簡単にするために、一本のベクトルのみを対象にして説明しました。しかし実際は、線形変換では一本のベクトルだけが変化しているのではなく、以下のアニメーションで示しているように、空間全体が変化しています。

さて、ここでグリッド線に注目してみてください。線形変換の前も線形変換の後も、直線は直線のままで保たれています。このように変換後も直線を保っているので「線形」という言葉が付けられているのです。

これは「非線形変換」との対比で見てみるとより理解が深まります。以下のアニメーションが非線形変換です。

非線形変換はとても美しいのですが、曲線を扱うので非常に複雑です。一方で、線形変換は直線のみを扱うので、操作しやすいという特徴があります。

1.3. 線形変換の3つの性質

なお線形変換には、いま見た「変換前も変換後も直線は直線を保つ」という性質の他に、さらに2つの性質があります。

たとえば以下のアニメーションのように、直線を保っていたとしても、原点が移動してしまっているものは線形変換ではありません。

また線形変換は、変換前も後もすべてのグリッドラインが平行性と等間隔性を保ちます。そのため、たとえ線形変換後も直線を保っていたとしても、以下のアニメーションのようにグリッドラインの等間隔性が保たれていないものも線形変換ではありません。

これらの3つの性質はまとめて覚えておきましょう。

線形変換の3つの性質まとめ

  1. 変換前も変換後も直線は直線のまま
  2. 変換前も変換後も原点は変わらず固定
  3. すべての直線は平行かつ等間隔

2. 線形変換を直感的に理解する方法

さて、ここまで解説してきたように、線形変換とは、行列によって空間を変化させることです。

そして、どのような行列で変換するかによって、空間がどう変形するのかが異なります。たとえば以下の行列 \(A\) は空間を反転させ、行列 \(B\) は空間を剪断せんだん(=平行方向に歪むこと)させます。

\[
A=\left[ \begin{array}{cc} 1 & 0\\ 0 & -1 \end{array} \right]
,\hspace{4mm}
B=\left[ \begin{array}{cc} 1 & 1\\ 0 & 1 \end{array} \right]
\]

参考に以下のアニメーションをご覧ください。

このように、アニメーションを見れば、ある行列が空間をどのように線形変換するのかを簡単に理解することができます。しかし実際には、いちいちプログラムを入力してアニメーションを作成するのは効率的ではありません。

そのため行列を見るだけで、その行列が空間をどのように変換するのかを素早く把握できるようになることが重要です。その方法を習得して頂くことこそが、この章の目的です。

2.1. 基底ベクトルの動きに注目する

結論から言うと、線形変換によって空間がどのように変換するのかは、二つの基底ベクトル \(\hat{\imath}\) と \(\hat{\jmath}\) の変化に注目することで、簡単に把握できるようになります。なお基底ベクトルについては『基底ベクトルとは何か?アニメーションで一目で理解』で解説しています。

\[\hat{\imath} = \left[ \begin{array}{cc} 1 \\ 0 \end{array} \right], \hspace{4mm} \hat{\jmath} = \left[ \begin{array}{cc} 0 \\ 1 \end{array} \right]\]

たとえば、以下の行列で空間を線形変換するとします。

\[A=\left[ \begin{array}{cc} 1 & 3\\ -2 & 0 \end{array} \right]\]

この行列によって、それぞれの基底ベクトルと、それらが形成する単位正方形(黄色の部分)は一体どのように変化するでしょうか?その点に注目しながら、以下のアニメーションをご覧ください。

いかがでしょうか。

要するに、基底ベクトル \(\hat{\imath}\) の行き先は変換行列の一列目になり、基底ベクトル \(\hat{\jmath}\) の行き先は変換行列の二列目になるのです。

このことを知っておけば、基底ベクトル \(\hat{\imath}\) と \(\hat{\jmath}\) が形成する単位正方形が、線形変換後にどのような平行四辺形になるのかを具体的にイメージすることができるようになります。そして、それによって空間がどのように変化するのかが、頭の中で理解することができるようになるのです。

ポイント
ある行列によって空間がどのように線形変換するかは、基底ベクトルに注目することでイメージしやすくなる。なぜなら行列のそれぞれの列が、基底ベクトルの行き先を示しているからである。これによって、線形変換前の基底ベクトルが形成する単位正方形が、線形変換によってどのような平行四辺形に変化するのを頭の中で描くことができる。その平行四辺形こそが線形変換後の空間を示している。

2.2. ベクトルの分解で線形変換を把握

さて、基底ベクトルとそれが形成する単位正方形に注目することで、線形変換によって空間がどのように変化するのかがイメージできることがわかりました。それに加えて、空間上のあるベクトルが、線形変換によってどのように移動するのかも、基底ベクトルを基準に考えることで、はるかにイメージしやすくなります。

たとえば以下のベクトル \(\vec{v}\) があるとします。

\[\vec{v}= \left[ \begin{array}{cc} -1 \\ 2 \end{array} \right]\]

このベクトル \(\vec{v}\) は、基底ベクトルを使って \( \vec{v}=-1\hat{\imath}+2\hat{\jmath} \) と分解することができます。なおベクトルの分解については『ベクトルの分解とは?その方法と幾何学的な意味の解説』で解説しています。

それでは、このベクトル \(\vec{v}\) を先ほどの行列 \(A\) で線形変換すると、どこに移動するでしょうか?

以下のアニメーションでご確認ください。

そう、線形変換前でも線形変換後でも、あるベクトルと基底ベクトルとの関係は変わらないのです。つまり線形変換前の座標が \( \vec{x}=-1\hat{\imath}+2\hat{\jmath} \) だったとしたら、線形変換後の座標も \( \vec{x}=-1\hat{\imath}+2\hat{\jmath} \) のままだということです(もちろん線形変換後の \(\hat{\imath}\) と \(\hat{\jmath}\) は変換行列の各列の成分に変化しています)

このことがわかると、ベクトル \(\vec{v}\) に限らず、任意のあらゆるベクトルの動きを、すべて以下の式で同じようにイメージすることができるようになります。

なお、もちろんベクトル \(\vec{v}\) の行き先は以下のように行列とベクトルの積を計算することで求めることができます。

\[
\left[ \begin{array}{cc} 1 & 3\\ -2 & 0 \end{array} \right]
\left[ \begin{array}{cc} -1 \\ 2 \end{array} \right]
=
\left[ \begin{array}{cc} 5 \\ 2 \end{array} \right]
\]

ただし、この計算式だけでは空間がどのように線形変換しているのかを直感的に理解することはできません。以下の式のように基底ベクトルの動きに注目することで初めて、具体的にイメージすることができるようになるのです。

\[
\begin{eqnarray}
\left[ \begin{array}{cc} 1 & 3\\ -2 & 0 \end{array} \right]
\left[ \begin{array}{cc} -1 \\ 2 \end{array} \right]
=
(-1)\left[ \begin{array}{cc} 1 \\ -2 \end{array} \right]
+
(2)\left[ \begin{array}{cc} 3 \\ 0 \end{array} \right]
=
\left[ \begin{array}{cc} 5 \\ 2 \end{array} \right]
\end{eqnarray}
\]

次にこの点について、さらに詳しく解説していきます。

ポイント
線形変換によって、あるベクトルがどのように移動するのかも、基底ベクトルを使って分解表示して理解することで、いちいち行列とベクトルの積を計算するよりも、遥かに簡単にイメージできるようになる。

2.3. 行列とは基底ベクトルの行き先を指定するもの

あらためてここまでの内容を整理してみましょう。

ここまでで、2次元空間の線形変換は、4つの数字を把握することで完全に理解することができるということがわかります。「4つの数字」とは、基底ベクトル \(\hat{\imath}\) の行き先を示す2つの数字と、\(\hat{\jmath}\) の行き先を示す2つの数字です。

行列とは、この4つの数字を組み合わせたものに過ぎません。つまり行列とは、単純に基底ベクトルの行き先を指示するものに過ぎないのです。

ここまで分かれば、行列を以下のものに置き換えることで、線形変換における行列の働きを一般化することができます。

\[
A=\left[ \begin{array}{cc} a & b\\ c & d \end{array} \right]
\]

行列の一列目は基底ベクトル \(\hat{\imath}\) の行き先であり、行列の二列目は基底ベクトル \(\hat{\jmath}\) の行き先です。そして、この行列で線形変換を行った際のあらゆるベクトル \(\left[ \begin{array}{cc} x \\ y \end{array} \right]\) の動きは以下の式で把握することができます。

\[
x\left[ \begin{array}{cc} a \\ c \end{array} \right]
+y\left[ \begin{array}{cc} b \\ d \end{array} \right]
\]

この式こそが線形変換を直感的に理解するためのカギです。

この部分さえ抑えておけば、ある行列を見ただけで、その行列が空間をどのように線形変換するかを素早くイメージすることができるようになります。

実際にイメージするときは、以下のアニメーションのように、まずは \(\hat{\imath}\) の行き先を想像して、次に \(\hat{\jmath}\) の行き先を想像するというように分解して考えるのがコツです。

なお、ここではわかりやすくするために2次元空間に絞って解説してきましたが、3次元になっても考え方はまったく同じです。その場合は \(3×3\) 行列の各列が、それぞれの基底ベクトル \(\hat{\imath}\)、\(\hat{\jmath}\)、\(\hat{k}\) の行き先を示しているということになります。

3次元空間の線形変換は、2次元空間よりも頭を使うことになりますが、まずは2次元空間の線形変換をしっかり理解することで、自然と理解もイメージもできるようになっていきます。

さて、次の章からは、いくつかの典型的な変換行列を見ていきます。それを見て頂くことで、この部分が線形変換を理解するカギであることもよりよく理解することができます。

ポイント
行列とは単純に基底ベクトルの行き先を指定するものである。そして、以下の式こそが、行列を見ただけで線形変換を数字から直感的にイメージできるようになるためのカギである。

\[
\left[ \begin{array}{cc} a & b\\ c & d \end{array} \right]
\left[ \begin{array}{cc} x \\ y \end{array} \right]
=
x\left[ \begin{array}{cc} a \\ c \end{array} \right]
+y\left[ \begin{array}{cc} b \\ d \end{array} \right]
\]

3. 代表的な変換行列

ここでは、よく使ういくつかの代表的な変換行列のアニメーションを用意しています。それぞれの行列によって基底ベクトルがどう動くのかをイメージすることで、線形変換を数字で直感的に理解するための良い練習になります。

実際にアニメーションを見る前に、基底ベクトルの動きを想像してから確認するようにして頂くとイメージ力が鍛えられるので、ぜひチャレンジしてみてください。

3.1. 反転行列

以下の行列で線形変換すると \( x \) 軸を境に空間が反転します。

\[
\left[ \begin{array}{cc}
1 & 0 \\
0 & -1 \\
\end{array} \right]
\]

この行列を見てみると、\(\hat{\imath}\) は変わらずに、\(\hat{\jmath}\) は \(\left[ \begin{array}{cc} 0 \\ -1 \end{array} \right]\) に移動することがわかります。このことから、この行列は空間を反転させるものであることがイメージできます。

それでは実際にアニメーションを確認してみましょう。

それでは以下の行列ではどうでしょうか?

\[
\left[ \begin{array}{cc}
-1 & 0 \\
0 & 1 \\
\end{array} \right]
\]

この行列では、\(\hat{\jmath}\) は変わらずに、\(\hat{\imath}\) が \(\left[ \begin{array}{cc} -1 \\ 0 \end{array} \right]\) に移動します。このことから、空間は\(y\) 軸を境に反転することがイメージできます。以下のアニメーションでご確認ください。

3.2. 回転行列

続いて回転行列を見てみましょう。以下の行列は、空間を反時計回りに変換します。

\[
\left[ \begin{array}{cc}
\cosθ & \sinθ \\
-\sinθ & \cosθ \\
\end{array} \right]
\]

たとえば\(90\)度回転させたいとします。その場合 \(\cos90° = 0\)、 \(\sin90°=1\) になりますね。そのため \(\left[ \begin{array}{cc} 0 & -1 \\ 1 & 0 \\ \end{array} \right]\) で線形変換すれば良いことがわかります。\(\hat{\imath}\) は \(\left[ \begin{array}{cc} 0 \\1 \end{array} \right]\) に、\(\hat{\jmath}\) は \(\left[ \begin{array}{cc} -1 \\ 0 \end{array} \right]\) に行くので、数字からもこの行列が空間を反時計回りに\(90\)度回転させることがイメージできます。

以下のアニメーションで実際に確認してみましょう。

以上は反時計回りでしたが、時計回りに回転させるには以下の行列を使います。

\[
\left[ \begin{array}{cc}
\cosθ & −\sinθ \\
\sinθ & \cosθ \\
\end{array} \right]
\]

時計回りに\(90\)度回転させる場合は、どのような行列で線形変換すれば良いでしょうか?イメージしてから、アニメーションで確認してみましょう。

3.3. 伸長行列

空間を水平方向に伸ばしたい場合は、以下の行列を使います。

\[
\left[ \begin{array}{cc}
k & 0 \\
0 & 1 \\
\end{array} \right]
\]

たとえば水平方向に\(2\)倍に伸ばしたいとします。その場合、\(\hat{\jmath}\) は動かさずに、\(\hat{\imath}\) だけを伸ばしたいですね。そのため、\(\left[ \begin{array}{cc} 2 & 0 \\ 0 & 1 \\ \end{array} \right]\) で線形変換すれば良いことがわかります。

これを応用すると、空間を縦に伸ばす行列もすぐに思い浮かべることができます。そう、次の行列ですね。

\[
\left[ \begin{array}{cc}
1 & 0 \\
0 & k \\
\end{array} \right]
\]

例として、以下のアニメーションでは空間を縦に\(2\)倍に引き伸ばしています。

なお、\(k\) の値を \(1\) 以下にすれば、空間は反対に縮まることになります。

3.4. 圧縮行列

以下に示している圧縮行列も有名なものです。

\[
\left[ \begin{array}{cc}
k & 0 \\
0 & 1/k \\
\end{array} \right]
\]

たとえば \(k=2\) の場合は空間はどのように線形変換するでしょうか。まずは頭の中でイメージしてから、以下のアニメーションで答え合わせをしてみましょう。

このように空間が上下に圧縮されて横に伸びます(もとの単位正方形の面積と、線形変換後の長方形の面積が同じ)

それでは以下のように \(k\) の位置を置き換えた場合はどうなるでしょうか?

\[
\left[ \begin{array}{cc}
0 & 1/k \\
k & 0 \\
\end{array} \right]
\]

\(k=2\) の場合でイメージしてみてください。答えは、そう、空間が横に圧縮されて縦に伸びますね。

3.5 射影行列

次は少しトリッキーかもしれません。以下の行列では、空間はどのようになるでしょうか?

\[
\left[ \begin{array}{ccc}
k & 0 \\
0 & 0 \\
\end{array} \right]
\]

\(k=2\) の場合で考えてみましょう。この行列では、\(\hat{\jmath}\) がゼロベクトルになるので、二次元空間から一次元空間になるのです。以下のアニメーションでご確認ください。

反対に以下の行列では、\(y\) 軸のみの一次元空間になります。

\[
\left[ \begin{array}{ccc}
0 & 0 \\
0 & k \\
\end{array} \right]
\]

同じく\(k=2\) の場合でアニメーションを確認してみましょう。

3.6. 剪断行列

最後に、剪断せんだん行列を確認しましょう。剪断行列とは、以下のように \(\hat{\imath}\) か \(\hat{\jmath}\) のどちらかはそのままにしておいて、一方の基底ベクトルの \(0\) の要素のみを変換するものです。

\[
\left[ \begin{array}{ccc}
1 & m \\
0 & 1 \\
\end{array} \right]
\]

\(m=1.5\) の剪断行列で線形変換すると、空間は以下のようになります。

このように、これまで見てきた変換行列とは異なり、空間が菱形に変形することが特徴です。

以下のように \(m\) の位置が変わることで、今度は \(\hat{\imath}\) だけが移動する線形変換になります。

\[
\left[ \begin{array}{ccc}
1 & 0 \\
m & 1 \\
\end{array} \right]
\]

実際に確認してみましょう。

4. まとめ

いかがだったでしょうか?

以上が線形変換です。線形変換の教科書はどうしても堅苦しい説明ばかりのものが多いですが、こうやってアニメーションを見ると、その意味することをあっという間に理解して頂けたと思います。

さて、最後にもう一度おさらいしましょう。

線形変換とは、グリッド線を平行で均一に保ったままのかたちで、空間を変形することです。このとき直線は直線のままですし、原点も動きません。そして、線形変換は、ほんの少数の数字によって示すことができます。それぞれの基底ベクトルの移動先の座標を示す数字です。

行列は、その基底ベクトルの行き先を指し示すものであり、線形変換を数字で表すための言語に過ぎません。具体的には、行列の各列が、それぞれの基底ベクトルの行き先を示しています。

そして行列とベクトルの積は、その行列による線形変換が、任意のベクトルをどのように動かすのかを知るためのものに過ぎません。

線形変換の実践上、重要なことは、行列を見るだけで空間がどのように変形するのかを想像できるようになることです。

これらのことをしっかりと吸収することが、これから線形代数の世界を深く理解するための基礎となります。言い換えれば、このページの内容をしっかり理解していれば、今後の線形代数の学習もとても簡単に感じることでしょう。

当ページが、あなたにとって、そのための助けになれば嬉しく思います。

次に読みたいページ
ここでお伝えしたように線形変換において行列は関数(写像)であり、これにベクトルを入力することで、新しいベクトルが出力され、空間が変化します。そして行列は続けて適用することができます。それが行列の積です。これによって、さらにさまざまな線形変換が可能になります。ぜひ、次はこれについて解説している『行列の積(掛け算)とは何か?計算方法と意味が圧倒的によくわかる解説』へと読み進めてください。

Python初心者におすすめのプログラミングスクール

「未経験からでもPythonを学べるプログラミングスクールを探しているけど、色々ありすぎてわからない」なら、次の3つのプログラミングスクールから選んでおけば間違いはありません。

Aidemy Premium:全くの初心者ができるだけ効率よく短期間で実務的に活躍できるAI人材になることを目的とした講座。キャリアカウンセリングや転職エージェントの紹介などの転職支援も充実しており、受講者の転職成功率が高い。

AIジョブカレPythonの基本をおさえた人が、実際に機械学習やディープラーニングを活用できるようになるための講座。転職補償型があるなどキャリア支援の内容が非常に手厚く、講師の質も最高クラス。コスパ最高。Python初心者用の対策講座もある。

データミックスプログラミング経験者のビジネスマンが、更なるキャリアアップのためにデータの処理方法を学んでデータサイエンティストになるための講座。転職だけでなく起業やフリーランスとして独立する人も多い。Python初心者用の対策講座もある。

特に、あなたが以下のような目標を持っているなら、この中から選んでおけば間違いはないでしょう。

・未経験からPythonエンジニアとして就職・転職したい
・AIエンジニアやデータサイエンティストとしてキャリアアップしたい
・起業やフリーランスを視野に入れたい

理由は「Python初心者のためのおすすめプログラミングスクール3選」で解説しています。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (11件)

  • 3.2. 回転行列の「以下の行列は、空間を反時計回りに変換します。」の直下のsin, cosを使った行列はsinの符号が逆ではないでしょうか。さらにその直下の0, 1を使った行列と見比べると符号が反転していて混乱してしまいました。
    どちらも正しいのなら、sin,cosの行列と0,1の行列で符号が反転する理由が知りたいです。

    また、「時計回りに回転させるには以下の行列を使います。」の直下の行列もsinの符号が逆に見えます。

      • どう考えても、正回転(時計回転)と逆回転(半時計回転)で符号が逆ですね。
        単に間違っているだけだと思われます。

    • 回転方向によって、行列式が変わることはありません。
      どちら回転方向でも、記事中の「時計方向の回転」の式が正しいです。

      その他の解説は、とてもお上手だと思います。

  • 本当に助かります。さらに数学が好きになりました。ありがとうございます!それにしても、なぜ教科書でこのようなことを説明しないのか不思議です。

  • 中卒なので、今まで数学をしたことがありまでんでしたが
    理解することができました。
    本当に心から感謝致します。

  • 学校で習ってもいまいち理解できなかったですが、この記事のおかげですんなり理解できました。
    ありがとうございます!

  • 行列式がベクトルの変換であることは理解できましたが
    複素数計算や極座標計算との違いが分かりません
    なぜ複素数や極座標というツールがあるのに、行列で表現する必要があるのか
    を解説していただけると幸いです

  • すごくわかりやすく書いていただいていいて、まったく驚きです。
    今まで線形代数の本の説明を見ても何やってんだかちんぷんかんぷんで、
    無理やり字面を追うだけで、興味をなくすところでした。
    動画も秀逸です。素晴らしい。

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる