【Python入門】ベクトルの内積|ベクトルの内角を計算する

ベクトルの内積|ベクトルの内角を計算する_アイキャッチ プログラミング

※ 当サイトはアフィリエイト広告を利用しています。

levtech-ad
スポンサーリンク

「ベクトルの内積」は、Pythonで容易に計算することができます。

本記事では、Pythonを使用したベクトルの内積の計算方法について、詳しくご説明します。

こんな人に読んでほしい
  • Python初心者の人
  • Pythonを使用した内積の計算方法について学びたい人
levtech-ad

ベクトルの内積

ベクトルの内積(inner product)は、要素同士の積の総和で定義されます。

以下にNumPyを使用したベクトルの内積の確認方法をご紹介します。

numpy.dot()

NumPyのnumpy.dot()は、引数に指定した1次元配列(ベクトル)同士の内積を出力することができます。

#input
import numpy as np

v1 = np.array([ 1,  2,  3])
v2 = np.array([10, 10, 10])

ip = np.dot(v1,v2)

print(ip)
#output
60

numpy.array.dot() 

NumPyのnumpy.array.dot()を使用しても、配列(ベクトル)同士の内積を出力することができます。

#input
import numpy as np

v1 = np.array([ 1,  2,  3])
v2 = np.array([10, 10, 10])

ip = v1.dot(v2)

print(ip)
#output
60

numpy.vdot()

NumPyのnumpy.vdot()も、指定した引数同士の内積を出力することができます。

引数が実数の場合、numpy.dot()と結果は変わりません。

引数が複素数の場合、複素共役を取った上で内積を計算します。

#input
import numpy as np

v1 = np.array([ 1,  2,  3])
v2 = np.array([10, 10, 10])
v3 = np.array([1+1j, 2+2j])
v4 = np.array([3+3j, 4+4j])

print("np.dot(v1,v2)={}".format(np.dot(v1,v2)))
print("np.vdot(v1,v2)={}".format(np.vdot(v1,v2)))
print("np.dot(v3,v4)={}".format(np.dot(v3,v4)))
print("np.vdot(v3,v4)={}".format(np.vdot(v3,v4)))
#output
np.dot(v1,v2)=60
np.vdot(v1,v2)=60
np.dot(v3,v4)=22j
np.vdot(v3,v4)=(22+0j)

多次元ベクトルの場合、以下の通りフラットにしてから計算します。

#input
import numpy as np

v1 = np.array([[1, 2, 3],[4, 5, 6]])
v2 = np.array([[9, 8, 7],[6, 5, 4]])

v3 = np.array([1, 2, 3, 4, 5, 6])
v4 = np.array([9, 8, 7, 6, 5, 4])

print("np.vdot(v1,v2)={}".format(np.vdot(v1,v2)))
print("np.vdot(v3,v4)={}".format(np.vdot(v3,v4)))
#output
np.vdot(v1,v2)=119
np.vdot(v3,v4)=119

フラットに結合した配列同士の内積と、結果が等しいことがわかると思います。

numpy.inner()

NumPyのnumpy.inner()も、指定した引数同士の内積を出力することができます。

1次元ベクトルの場合、numpy.dot()と結果は変わりません。

引数が多次元ベクトルの場合、軸方向に計算した配列を生成します。

#input
import numpy as np

v1 = np.array([[1, 2, 3],[4, 5, 6]])
v2 = np.array([[9, 8, 7],[6, 5, 4]])

v3 = np.array([1, 2, 3, 4, 5, 6])
v4 = np.array([9, 8, 7, 6, 5, 4])

print("np.inner(v1,v2)=\n{}".format(np.inner(v1,v2)))
print("np.inner(v3,v4)={}".format(np.inner(v3,v4)))
#output
np.inner(v1,v2)=
[[ 46  28]
 [118  73]]
np.inner(v3,v4)=119

ベクトルの内角の計算

numpy.dot()を使用して、ベクトルの内角を計算する関数を実装してみます。

#input
import numpy as np

def v_angle(v1, v2):

    v1_n = np.linalg.norm(v1)
    v2_n = np.linalg.norm(v2)

    ip = np.dot(v1, v2)

    cos_theta = ip / (v1_n * v2_n)
    theta = np.arccos(cos_theta)
    deg = np.degrees(theta)

    return deg

上記実装した関数にベクトルを引数として指定し、内角を計算してみます。

#input
v1 = np.array([1, 0])
v2 = np.array([np.sqrt(2), np.sqrt(2)])

deg= v_angle(v1, v2)
print("θ = {:.1f}".format(deg))
#output
θ = 45.0

まとめ

この記事では、Pythonを使用したベクトルの内積の計算方法について、ご説明しました。

本記事を参考に、ぜひ試してみて下さい。

参考

Python学習用おすすめ教材

Pythonの基本を学びたい方向け

統計学基礎を学びたい方向け

Pythonの統計解析を学びたい方向け

おすすめプログラミングスクール

Pythonをはじめ、プログラミングを学ぶなら、TechAcademy(テックアカデミー)がおすすめです。

私も入っていますが、好きな時間に気軽にオンラインで学べますので、何より楽しいです。

現役エンジニアからマンツーマンで学べるので、一人では中々続かない人にも、向いていると思います。

無料体験ができますので、まずは試してみてください!

\まずは無料体験!/
スポンサーリンク
タイトルとURLをコピーしました