計算した内積が合っているかどうか確認したい時、pythonであれば簡単に正解を確認することができます。
この記事を読むことで、pythonを使った内積の計算できるようになります。
pythonで内積を計算する方法2選
今回はpythonで内積を計算する方法を2つ紹介します。
それぞれの方法をコードを確認しながら見ていきましょう。
今回記載しているコードはグーグルコラボラトリーで動作を確認しています。
for文で内積を計算
関数を自作して内積を求めてみましょう。
ベクトルの内積は各要素の積の総和で求められます。
内積の公式をコーディングします。
def dot(n, m):
m_dot = 0
for a, b in zip(list1, list2):
m_dot += a * b
return m_dot
作成した関数を簡単に説明します。
関数をdefで定義します。
zip関数をfor文でループさせることで、リスト内の要素を同時にループ可能です。
始めに空の変数m_dotを用意し、 各要素の積をm_dotに加算させていきます。
加算が全て終了したら、m_dotを返して終了です。
最後に自作した関数がきちんと動作するか確認します。
list1 = [3, -6, 9]
list2 = [-5, -2, 7]
dot(list1, list2)
出力:
60
numpyで内積を計算
numpyは行列の扱いに長けたライブラリです。
使用する場合はあらかじめnumpyをインストールしておく必要があります。
始めにnumpyをインポートしましょう。numpyはnpと省略するのが一般的です。
import numpy as np
numpy.inner()
numpy.inner()は1次元配列のベクトルの通常の内積を計算できます。
list1とlist2を配列として用意し、試してみましょう。
array_1 = np.array([3, -6, 9])
array_2 = np.array([-5, -2, 7])
np.inner(array_1, array_2)
出力:
60
numpy.dot()
numpy.dot()関数は2つの1次元配列の内積を計算することができます。
ちなみに配列が両方とも2次元配列の場合は行列の乗算になります。
array_1 = np.array([3, -6, 9])
array_2 = np.array([-5, -2, 7])
np.dot(array_1, array_2)
出力:
60
演算子@
numpy.dot()関数と同様の操作を演算子@でも可能です。
配列(array)のみ計算可能で、リストでは計算できない点に注意してください。
array_1 @ array_2
出力:
60
記号を含む行列の内積:sympy
sympyをインポートすることで記号を含む行列を扱うことができます。
sympyも外部ライブラリのため、開発環境にインストールが必要です。
sympy.var()で記号を登録します。sympy.Matrix()で行列を生成します。
import sympy
sympy.var('a_x:y,b_x:y')
array_a = sympy.Matrix([a_x, a_y])
array_b = sympy.Matrix([b_x, b_y])
array_a.dot(array_b)
出力:
axbx+ayby
まとめ
今回はpythonで内積を求める方法を2つ紹介しました。
numpy.inner()を使用すると簡単に内積を求めることができます。
この記事を読んでpythonに興味を持った人は、次の記事もぜひ読んでみてください。
pythonを独学する方法について紹介しています。
コメント