「ドット積」と「クロス積」の比較

線形代数の基礎
No.157
数学

日付:2025年2月16日

ドット積(内積)とクロス積(外積)の違いを明確にし、それぞれの計算方法や用途について詳しく解説します。Pythonによる実装例も紹介します。

目 次

はじめに

ベクトルの積には ドット積(内積)クロス積(外積) の 2 種類があります。

  • ドット積はスカラー値(数値)を出力し、ベクトルの長さや角度を求めるのに適している。
  • クロス積は新しいベクトルを出力し、ベクトルの方向や法線を求めるのに適している。

本記事では、

  • ドット積とクロス積の違い
  • 計算方法と Python による実装
  • 用途と活用事例
    を詳しく解説します。

1. ドット積(内積)とは?

ドット積は 2 つのベクトルの対応する成分を掛けて足し合わせる演算で、結果はスカラー値(数値)になります。

定義

ab=abcosθ\mathbf{a} \cdot \mathbf{b} = |\mathbf{a}| |\mathbf{b}| \cos\theta

または成分表示で表すと、

ab=a1b1+a2b2+a3b3\mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + a_3 b_3

Python による実装

PYTHON
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=321\times4 + 2\times5 + 3\times6 = 4 + 10 + 18 = 32

2. クロス積(外積)とは?

クロス積は 2 つのベクトルの外積を求める演算で、結果は新しいベクトルになります。

定義

a×b=[a2b3a3b2a3b1a1b3a1b2a2b1]\mathbf{a} \times \mathbf{b} = \begin{bmatrix} a_2 b_3 - a_3 b_2 \\ a_3 b_1 - a_1 b_3 \\ a_1 b_2 - a_2 b_1 \end{bmatrix}

Python による実装

PYTHON
# クロス積 cross_product = np.cross(a, b) print("クロス積:", cross_product)

実行結果

クロス積: [-3 6 -3]

計算の詳細:

[2×63×53×41×61×52×4]=[121512658]=[363]\begin{bmatrix} 2\times6 - 3\times5 \\ 3\times4 - 1\times6 \\ 1\times5 - 2\times4 \end{bmatrix} = \begin{bmatrix} 12 - 15 \\ 12 - 6 \\ 5 - 8 \end{bmatrix} = \begin{bmatrix} -3 \\ 6 \\ -3 \end{bmatrix}

3. ドット積とクロス積の比較

項目ドット積(内積)クロス積(外積)
結果の型スカラー(数値)ベクトル
計算方法a1b1+a2b2+a3b3a_1b_1 + a_2b_2 + a_3b_3(a2b3a3b2,a3b1a1b3,a1b2a2b1)(a_2b_3 - a_3b_2, a_3b_1 - a_1b_3, a_1b_2 - a_2b_1)
角度との関係cosθ\cos\theta に比例sinθ\sin\theta に比例
ベクトルの向き変わらない右手系に従う
用途長さの計算・類似度法線・回転計算

4. どちらを使うべきか?

ベクトルの方向を求めたい場合クロス積
ベクトルの関係(類似度、角度)を求めたい場合ドット積

特に、機械学習や統計学では ドット積 が、3D グラフィックスや物理学では クロス積 が多く使われます。

5. まとめ

  • ドット積はスカラー(数値)、クロス積はベクトル(方向)を出力
  • ドット積は長さや角度を求めるのに適し、クロス積は法線や回転計算に適している
  • Python では np.dot() でドット積、np.cross() でクロス積を計算可能

ドット積とクロス積の違いを理解することで、数学やプログラミングの応用がより深まります。