Python|ベクトルの内積・外積を求める:numpy.dot(), numpy.cross()

1. はじめに

Pythonでは、数値計算ライブラリのNumPyを使うことで、ベクトルの内積や外積を簡単に求めることができます。
特に、線形代数や機械学習、物理シミュレーションなどの分野では、ベクトル演算が頻繁に登場します。

本記事では、numpy.dot()とnumpy.cross()を使ったベクトル演算の基本と応用を、Python初心者にもわかりやすく解説します。
具体的なコードと出力結果を交えながら、「何がどう計算されているか」を丁寧に説明していきます。

 

2. Pythonでベクトルの内積・外積を計算する基本

2-1. NumPyとは?

NumPy(Numerical Python)は、Pythonで数値計算を行うためのライブラリです。ベクトルや行列の演算を効率的に行うための機能が多数備わっており、科学技術計算やAI開発にもよく使われます。

import numpy as np

2-2. 内積(ドット積):numpy.dot()

2つのベクトルの内積は、それぞれの対応する要素を掛け合わせて合計した値です。
たとえば、ベクトルA = [1, 2, 3]、B = [4, 5, 6] の内積は以下のようになります。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 内積の計算
dot_product = np.dot(a, b)
print("内積:", dot_product)

実行結果:

内積: 32

解説:
1×4 + 2×5 + 3×6 = 4 + 10 + 18 = 32
これがベクトルAとBの内積です。

2-3. 外積(クロス積):numpy.cross()

外積は3次元ベクトル同士に適用できる演算で、2つのベクトルに垂直なベクトルを求めます。

import numpy as np

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 外積の計算
cross_product = np.cross(a, b)
print("外積:", cross_product)

実行結果:

外積: [-3  6 -3]

解説:
結果 [-3, 6, -3] は、ベクトルaとbの両方に直交するベクトルです。

 

3. よくある使い方・応用例

3-1. 機械学習での内積の活用例

内積は、2つのベクトルの「類似度(方向の一致度)」を計算するときによく使われます。
たとえば、文章をベクトル化して、意味の似ている文章を探す自然言語処理の分野でも使われています。

vec1 = np.array([0.1, 0.3, 0.5])
vec2 = np.array([0.2, 0.4, 0.6])

similarity = np.dot(vec1, vec2)
print("ベクトルの類似度(内積):", similarity)

実行結果:

ベクトルの類似度(内積): 0.44

3-2. 3Dグラフィックスでの外積

外積は、2本のベクトルから垂直方向のベクトルを求めるのに使えるため、3Dグラフィックスやゲーム開発では「法線ベクトル」の計算などに多用されます。

# 三角形の2辺から法線ベクトルを計算
p1 = np.array([0, 0, 0])
p2 = np.array([1, 0, 0])
p3 = np.array([0, 1, 0])

v1 = p2 - p1
v2 = p3 - p1

normal_vector = np.cross(v1, v2)
print("法線ベクトル:", normal_vector)

実行結果:

法線ベクトル: [0 0 1]

 

4. numpy.dot(), numpy.cross() の注意点・エラー対策

4-1. 次元が一致しないとエラーになる

np.dot() では、次元が一致しないと以下のようなエラーになります。

a = np.array([1, 2, 3])
b = np.array([1, 2])  # 要素数が異なる

# エラーになる
np.dot(a, b)

実行結果:

ValueError: shapes (3,) and (2,) not aligned

対策:
→ ベクトルの長さ(次元)が一致しているか事前にチェックしましょう。

4-2. 外積は3次元ベクトルで使うのが基本

np.cross() は3次元ベクトルが基本です。2次元ベクトルで使用した場合、計算結果はスカラーになります。

a = np.array([1, 2])
b = np.array([3, 4])

cross_2d = np.cross(a, b)
print(cross_2d)

実行結果:

-2

注意:
このように、2Dの場合はz方向のスカラー量として返されるため、3次元の直交ベクトルではなくなります。

 

5. まとめ|内積・外積の違いと活用場面を整理しよう

この記事では、PythonとNumPyを使ってベクトルの内積と外積を求める方法を学びました。

  • numpy.dot():ベクトルの内積を計算し、類似度や投影量を測るのに便利
  • numpy.cross():外積を求め、3D空間で垂直なベクトルを算出する際に使用

特に、データ分析・物理計算・機械学習・3Dグラフィックスといった分野での活用が可能です。

最後に一言:
「単なる数式の計算」ではなく、「空間やデータの意味」を理解する視点で使うと、より深く理解できます!

タイトルとURLをコピーしました