AIに欠かせない数学を、プログラミング言語Pythonを使って高校生の学習範囲から学び直す連載。今回は「ベクトル」の計算と、その応用、相関係数について、図版とPythonコードを交えて解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
AIに欠かせない数学を、プログラミング言語Pythonを使って高校生の学習範囲から学び直す本連載『「AI」エンジニアになるための「基礎数学」再入門』。前回は「スカラ」「ベクトル」「行列」「テンソル」の基礎知識を学びました。今回のテーマは、ベクトルの扱い方=計算方法です。
ところで、皆さんは英語を学習したことがあると思います。新たな英単語・英文法を学ぶことで、より多くの英文を読解できるようになることを経験しているはずです。何が言いたいかというと、今回のテーマを学ぶことは、数学に関連する文献を読むことにおける「単語や文法を学ぶ」ようなことに値します。つまり、より多くの文献を読解できるようになるはずなので、しっかり学んでいきましょう。
ベクトルの計算方法を解説するために、例として次のような2つのベクトルを考えます。
今回は2次元(要素が2つ)のベクトルで、次のような数字の集まりとします。
Pythonのリストで表現すると、次のような具合です。
vec_a = [1, 3**0.5] vec_b = [2*3**0.5, 2] vec_a, vec_b # ([1, 1.7320508075688772], [3.4641016151377544, 2])
今後の説明は上記のベクトルを使用します。
ベクトルには長さという概念があります。
長さを表す記号は|<ベクトル>|です。先ほどのベクトルaの長さの場合、下記のように書きます。
計算方法は三平方の定理を用いて考えると分かりやすいでしょう。
斜辺2=底辺2+高さ2
従って、各ベクトルの長さは次の通りです。
Pythonコードで結果を確認してみます。
# numpyならば np.linalg.norm で計算できる def get_length(vec): sq = [e**2 for e in vec] return sum(sq)**0.5 get_length(vec_a), get_length(vec_b) # (2.0, 4.0)
なお、長さの概念は、この後の掛け算部分に関連するので押さえておきましょう。
足し算について、まずはイメージを捉えていきましょう。足し算はベクトルの合成を表します。
どのように合成をするかというと、次のような手順です。
3.で描かれたベクトルが「合成されたベクトル」です。
イメージがつかめたら計算方法を確認してみましょう。計算方法は簡単で、対応する要素同士で足し算をするだけです。Pythonで確認してみましょう。
def add_vec(vec1, vec2): return [e1+e2 for e1,e2 in zip(vec1, vec2)] add_vec(vec_a, vec_b) # [4.464101615137754, 3.732050807568877]
さて、一方で引き算のイメージは簡単です。
引き算のベクトルは次のような手順で描けます。
2.(図の【2】)の矢印が引き算後のベクトルです。
計算方法は足し算と同様です。次のように考えましょう。
足し算と同様に計算できます。こちらも、Pythonで確認してみましょう。
vec_a = [1, 3**0.5] vec_b = [2*3**0.5, 2] def subt_vec(vec1, vec2): return [e1-e2 for e1,e2 in zip(vec1, vec2)] subt_vec(vec_a, vec_b) # [-2.4641016151377544, -0.2679491924311228]
ベクトルの掛け算には、内積、外積の2種類があります。それぞれ計算結果の表す意味が異なるので確認していきましょう。
なお、掛け算と割り算は表裏一体のように思えるものの、実はベクトルに関しての割り算は定義されていません。よって、今回は掛け算のみ解説します。
Copyright © ITmedia, Inc. All Rights Reserved.