線形代数は、ベクトルや行列を様々な形に変換して、別の新しいベクトルや行列を作り出すための算術です。このことからわかる通り、ベクトルは線形代数の最も基本的な構成要素です。当ページでは、このベクトルについて以下のことがわかります。
当ページでわかること
- 線形代数におけるベクトルとは
- プログラマーにとってのベクトルとは
線形代数におけるベクトルとは何か
線形代数においてベクトルとは何なのでしょうか?
実は、この定義は一つに定まっているわけではありません。線形代数は様々な学問分野で使われている算術です。そして同じ線形代数でも、それを使う学問分野によって、ベクトルの定義は異なるのです。
具体的には以下の通りに異なる定義があります。
- 物理学:長さ(大きさ)と向きをもつ矢印
- コンピューター・サイエンス:数値のリスト
- 数学:原点からの位置を表す座標であり、上の二つの性質の両方を持つもの
このように同じ線形代数を学ぶとしても、どの学問のために学ぶかによってベクトルの定義は異なります。そしてこれが線形代数の初学者の多くが混乱してしまう原因になっています。
既に述べた通り、線形代数はベクトルや行列を様々な形に変換するための算術です。これは線形代数は、物理学においては既存の矢印から新しい矢印を生み出すための技術であり、コンピューター・サイエンスにおいては既存のデータから新しいデータを生み出すための技術であり、数学においてはその両方の性質をもつ技術であるということを意味します。
この点がこんがらがっていると、線形代数を学ぼうとしても、次第に何をやっているのかわからなくなり挫折してしまいます。たとえばコンピューター・サイエンスのために線形代数を学んでいるのに、「ベクトルは長さと向きをもつ矢印である」と解釈していると、「自分はなぜ矢印を扱っているのか」と無駄な思考で脳の容量が浪費されてしまい、挫折しやすくなってしまいます。
多くのプログラマーが線形代数をとっつきにくく感じる原因はこの点にあります。それでは、私たちプログラマーは線形代数におけるベクトルをどのように解釈すれば良いのでしょうか?
プログラマーにとってベクトルとは何か
結論からお伝えすると、私たちプログラマーにとってベクトルは矢印などではなく、数値のリストで表されたデータです。
たとえば、A、B、C、D、E という 5 つのウェブサイトがあるとします。これらの 5 つのサイトの被リンクの関係は以下の表で示せるとします。
A | B | C | D | E | |
A | 0 | 1 | 1 | 0 | 1 |
B | 0 | 0 | 1 | 0 | 0 |
C | 1 | 1 | 0 | 0 | 0 |
D | 0 | 1 | 0 | 0 | 1 |
E | 1 | 1 | 1 | 1 | 0 |
この表の各行が、それぞれのサイトが、どのサイトからリンクを得ているかを示しています。線形代数では、この表のデータを、次のようにシンプルにベクトルで表します。
- \(A = \begin{pmatrix} 0 & 1 & 1 & 0 & 1 \end{pmatrix}\)
- \(B = \begin{pmatrix} 0 & 0 & 1 & 0 & 0 \end{pmatrix}\)
- \(C = \begin{pmatrix} 1 & 1 & 0 & 0 & 0 \end{pmatrix}\)
- \(D = \begin{pmatrix} 0 & 1 & 0 & 0 & 1 \end{pmatrix}\)
- \(E = \begin{pmatrix} 1 & 1 & 1 & 1 & 0 \end{pmatrix}\)
私たちにとっては、このようにデータを数値のリストで表したものがベクトルです。
そして、このデータを機械学習や分析に適したかたちに変換するための技術が線形変換です。
このことが分かっていれば、線形代数で学ぶ行列の演算や分解は、データを様々に加工するためのものであることがわかります。そう理解すると、例えば「自分は機械学習において最も重要なデータを様々に扱えるようになるために線形代数を学んでいる」というように目的意識がハッキリします。そして目的意識がハッキリすれば、はるかに学びやすくなります。
重要なことなので繰り返します。
私たちプログラマーにとってベクトルとは数値のリストで表したデータです。
そして、このデータに対して様々な演算を行なったり、データそのものを分解することによって、機械学習に適した形に変換したり、データを深く解釈したりするのが線形代数です。プログラマーが線形代数を学ぶときは、この視点を常に頭に入れた上で学んでいきましょう。
一緒に読んでおきたいページ