注:本文为 “向量内积与外积” 相关合辑。
略排未全校去重。
如有内容异常,请看原文。
向量点乘(即内积)和叉乘(即外积、向量积)区别与意义分析
Lu_gl 于 2022-01-05 20:20:54 发布
向量之间的叉乘和点乘,概念易混淆,现对其进行详细分析介绍。
首先,向量(Vector) 是几乎所有几何问题中的一个基本点。向量的定义包含方向和一个数(长度)。
在二维空间中,一个向量可用一对 x x x 和 y y y 来表示。向量:既有方向又有大小的量。 通常情况下会将向量放到坐标系中,常用的是笛卡尔坐标系,向量起始点通常放到原点(注:没有固定的起点,只要方向相同,大小相等,就认为两向量是相同的,但为了用数值坐标来表示向量,将起始点放到原点)。
一、点乘 (Dot Product)
向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。点乘,也叫数量积。结果是一个向量在另一个向量方向上投影的长度,是一个标量。
假设向量 a \mathbf{a} a 和向量 b \mathbf{b} b:
a = [ a 1 , a 2 , … a n ] b = [ b 1 , b 2 , … b n ] \begin{align*} & a=\left[ {{a}_{1}},{{a}_{2}},\ldots {{a}_{n}} \right] \\ & b=\left[ {{b}_{1}},{{b}_{2}},\ldots {{b}_{n}} \right] \\ \end{align*} a=[a1,a2,…an]b=[b1,b2,…bn]
a \mathbf{a} a 和 b \mathbf{b} b 的点积公式(要求一维向量 a \mathbf{a} a 和向量 b \mathbf{b} b 的行列数相同)为:
a ⋅ b = a 1 b 1 + a 2 b 2 + a 3 b 3 \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + a_3 b_3 a⋅b=a1b1+a2b2+a3b3
对应点乘的几何意义为
点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在 b \mathbf{b} b 向量在 a \mathbf{a} a 向量方向上的投影,有公式:
a ⋅ b = ∥ a ∥ ∥ b ∥ cos ( θ ) \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos(\theta) a⋅b=∥a∥∥b∥cos(θ)
θ \theta θ 是向量 a \mathbf{a} a 和向量 b \mathbf{b} b 之间的夹角。这里 ∥ a ∥ \|\mathbf{a}\| ∥a∥ 我们称为向量 a \mathbf{a} a 的模(norm),也就是 a \mathbf{a} a 的长度,在二维空间中就是 ∥ a ∥ = x 2 + y 2 \|\mathbf{a}\| = \sqrt{x^2 + y^2} ∥a∥=x2+y2。这样就可以很容易计算两条线的夹角:
cos ( θ ) = a ⋅ b ∥ a ∥ ∥ b ∥ \cos(\theta) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} cos(θ)=∥a∥∥b∥a⋅b
向量差的模长与向量夹角推导
对于推导过程可以稍微利用余弦定理如下:
首先看一下向量组成:

设向量关系为 c = a − b \mathbf{c} = \mathbf{a} - \mathbf{b} c=a−b( a \mathbf{a} a、 b \mathbf{b} b、 c \mathbf{c} c 均为向量), θ \theta θ 为 a \mathbf{a} a 与 b \mathbf{b} b 的夹角(取值范围 [ 0 , π ] [0, \pi] [0,π]), ∥ a ∥ \|\mathbf{a}\| ∥a∥、 ∥ b ∥ \|\mathbf{b}\| ∥b∥、 ∥ c ∥ \|\mathbf{c}\| ∥c∥ 分别表示三个向量的模长(非负实数)。
-
由三角形余弦定理建立关系
当 a \mathbf{a} a、 b \mathbf{b} b、 c \mathbf{c} c 构成三角形(或共线)时,根据三角形余弦定理, c \mathbf{c} c 的模长平方满足:
∥ c ∥ 2 = ∥ a ∥ 2 + ∥ b ∥ 2 − 2 ∥ a ∥ ∥ b ∥ cos θ \|\mathbf{c}\|^2 = \|\mathbf{a}\|^2 + \|\mathbf{b}\|^2 - 2\|\mathbf{a}\|\|\mathbf{b}\|\cos\theta ∥c∥2=∥a∥2+∥b∥2−2∥a∥∥b∥cosθ -
用向量点积展开 ∥ c ∥ 2 \|\mathbf{c}\|^2 ∥c∥2
由 c = a − b \mathbf{c} = \mathbf{a} - \mathbf{b} c=a−b,结合“向量模长的平方等于向量自身的点积”(即 ∥ x ⃗ ∥ 2 = x ⃗ ⋅ x ⃗ \|\vec{x}\|^2 = \vec{x} \cdot \vec{x} ∥x∥2=x⋅x),得:
∥ c ∥ 2 = ( a − b ) ⋅ ( a − b ) \|\mathbf{c}\|^2 = (\mathbf{a} - \mathbf{b}) \cdot (\mathbf{a} - \mathbf{b}) ∥c∥2=(a−b)⋅(a−b)按点积分配律、交换律展开,并利用 a ⋅ a = ∥ a ∥ 2 \mathbf{a} \cdot \mathbf{a} = \|\mathbf{a}\|^2 a⋅a=∥a∥2、 b ⋅ b = ∥ b ∥ 2 \mathbf{b} \cdot \mathbf{b} = \|\mathbf{b}\|^2 b⋅b=∥b∥2 化简:
( a − b ) ⋅ ( a − b ) = a ⋅ a − 2 a ⋅ b + b ⋅ b = ∥ a ∥ 2 + ∥ b ∥ 2 − 2 a ⋅ b (\mathbf{a} - \mathbf{b}) \cdot (\mathbf{a} - \mathbf{b}) = \mathbf{a} \cdot \mathbf{a} - 2\mathbf{a} \cdot \mathbf{b} + \mathbf{b} \cdot \mathbf{b} = \|\mathbf{a}\|^2 + \|\mathbf{b}\|^2 - 2\mathbf{a} \cdot \mathbf{b} (a−b)⋅(a−b)=a⋅a−2a⋅b+b⋅b=∥a∥2+∥b∥2−2a⋅b -
求解向量夹角 θ \theta θ
联立步骤1与步骤2的结果,消去 ∥ c ∥ 2 \|\mathbf{c}\|^2 ∥c∥2 并约去同类项,结合点积的几何定义 a ⋅ b = ∥ a ∥ ∥ b ∥ cos θ \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\|\|\mathbf{b}\|\cos\theta a⋅b=∥a∥∥b∥cosθ,整理得夹角余弦值:
cos θ = a ⋅ b ∥ a ∥ ∥ b ∥ \cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\|\|\mathbf{b}\|} cosθ=∥a∥∥b∥a⋅b若需明确夹角 θ \theta θ,可通过反余弦函数求解:
θ = arccos ( a ⋅ b ∥ a ∥ ∥ b ∥ ) \theta = \arccos\left(\frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\|\|\mathbf{b}\|}\right) θ=arccos(∥a∥∥b∥a⋅b)
根据这个公式就可以计算向量 a \mathbf{a} a 和向量 b \mathbf{b} b 之间的夹角。 从而就可以进一步判断这两个向量是否是同一方向,是否正交(也就是垂直)等方向关系,具体对应关系为:
a ⋅ b > 0 方向基本相同,夹角在 0 ∘ 到 9 0 ∘ 之间 a ⋅ b = 0 正交,相互垂直 a ⋅ b < 0 方向基本相反,夹角在 9 0 ∘ 到 18 0 ∘ 之间 \begin{array}{ccl} \mathbf{a} \cdot \mathbf{b} &> 0 & \quad \text{方向基本相同,夹角在 } 0^\circ \text{ 到 } 90^\circ \text{ 之间} \\ \mathbf{a} \cdot \mathbf{b} &= 0 & \quad \text{正交,相互垂直} \\ \mathbf{a} \cdot \mathbf{b} &< 0 & \quad \text{方向基本相反,夹角在 } 90^\circ \text{ 到 } 180^\circ \text{ 之间} \end{array} a⋅ba⋅ba⋅b>0=0<0方向基本相同,夹角在 0∘ 到 90∘ 之间正交,相互垂直方向基本相反,夹角在 90∘ 到 180∘ 之间
总结就是:
假如向量 a \mathbf{a} a 为 ( x 1 , y 1 ) (x_1, y_1) (x1,y1),向量 b \mathbf{b} b 为 ( x 2 , y 2 ) (x_2, y_2) (x2,y2),
点积(也叫内积)结果为 a ⋅ b = x 1 x 2 + y 1 y 2 = ∥ a ∥ ∥ b ∥ cos ( θ ) \mathbf{a} \cdot \mathbf{b} = x_1 x_2 + y_1 y_2 = \|\mathbf{a}\| \|\mathbf{b}\| \cos(\theta) a⋅b=x1x2+y1y2=∥a∥∥b∥cos(θ),可以理解为向量 a \mathbf{a} a 在向量 b \mathbf{b} b 上投影的长度乘以向量 b \mathbf{b} b 的长度。
应用:

二、叉乘(cross product)
两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量,并且两个向量的叉积与这两个向量组成的坐标平面垂直。
对于向量 a \mathbf{a} a 和向量 b \mathbf{b} b:
a = ( x 1 , y 1 , z 1 ) b = ( x 2 , y 2 , z 2 ) \begin{align*} & a=\left( {{x}_{1}},{{y}_{1}},{{z}_{1}} \right) \\ & b=\left( {{x}_{2}},{{y}_{2}},{{z}_{2}} \right) \\ \end{align*} a=(x1,y1,z1)b=(x2,y2,z2)
a \mathbf{a} a 和 b \mathbf{b} b 的叉乘公式为,其中 i = ( 1 , 0 , 0 ) \mathbf{i} = (1,0,0) i=(1,0,0)、 j = ( 0 , 1 , 0 ) \mathbf{j} = (0,1,0) j=(0,1,0)、 k = ( 0 , 0 , 1 ) \mathbf{k} = (0,0,1) k=(0,0,1):
a × b = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} a×b= ia1b1ja2b2ka3b3
根据 i \mathbf{i} i、 j \mathbf{j} j、 k \mathbf{k} k 间关系,有:
a × b = ( a 2 b 3 − a 3 b 2 ) i − ( a 1 b 3 − a 3 b 1 ) j + ( a 1 b 2 − a 2 b 1 ) k \mathbf{a} \times \mathbf{b} = (a_2 b_3 - a_3 b_2) \mathbf{i} - (a_1 b_3 - a_3 b_1) \mathbf{j} + (a_1 b_2 - a_2 b_1) \mathbf{k} a×b=(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)k
对应叉乘的几何意义为
在三维几何中,向量 a \mathbf{a} a 和向量 b \mathbf{b} b 的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于 a \mathbf{a} a 和 b \mathbf{b} b 向量构成的平面。 叉乘的结果是个向量,方向在 z z z 轴上,在二维空间里,让我们暂时忽略它的方向,将结果看成一个向量,那么这个结果类似于上述的点积,有公式:
a × b = ∥ a ∥ ∥ b ∥ sin ( θ ) \mathbf{a} \times \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \sin(\theta) a×b=∥a∥∥b∥sin(θ)
然而角度 θ \theta θ 和上面点乘的角度有一点点不同,它是有正负的,是指从 a \mathbf{a} a 到 b \mathbf{b} b 的角度。因此,向量的外积不遵守乘法交换率,因为 a × b = − b × a \mathbf{a} \times \mathbf{b} = -\mathbf{b} \times \mathbf{a} a×b=−b×a。在物理学中,已知力与力臂求外积,就是向量的外积,即叉乘。
在 3D 图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于 a \mathbf{a} a、 b \mathbf{b} b 的法向量,从而构建 X X X、 Y Y Y、 Z Z Z 坐标系。 如下图所示:

在二维空间中,叉乘还有另外一个几何意义就是: a × b \mathbf{a} \times \mathbf{b} a×b 等于由向量 a \mathbf{a} a 和向量 b \mathbf{b} b 构成的平行四边形的面积。

叉积的绝对值就是 A \mathbf{A} A 和 B \mathbf{B} B 为两边说形成的平行四边形的面积。也就是 A B \mathbf{AB} AB 所包围三角形面积的两倍。在计算面积时,我们要经常用到叉积。
方向判定:
向量 c \mathbf{c} c 的方向与 a \mathbf{a} a、 b \mathbf{b} b 所在的平面垂直,且方向要用“右手法则”判断。判断方法如下:
- 右手掌张开,四指并拢,大拇指垂直于四指指向的方向。
- 伸出右手,四指弯曲,四指与 A \mathbf{A} A 旋转到 B \mathbf{B} B 方向一致,那么大拇指指向为 C \mathbf{C} C 向量的方向。

总结就是:
假如向量 a \mathbf{a} a 为 ( x 1 , y 1 ) (x_1, y_1) (x1,y1),向量 b \mathbf{b} b 为 ( x 2 , y 2 ) (x_2, y_2) (x2,y2),
叉积(也叫外积)的模为 a × b = x 1 y 2 − x 2 y 1 = ∥ a ∥ ∥ b ∥ sin ( θ ) \mathbf{a} \times \mathbf{b} = x_1 y_2 - x_2 y_1 = \|\mathbf{a}\| \|\mathbf{b}\| \sin(\theta) a×b=x1y2−x2y1=∥a∥∥b∥sin(θ),可以理解为平行四边形的有向面积(三维以上为体积)。外积的方向垂直于这两个方向。
应用:

带你一次搞懂点积(内积)、叉积(外积)
隐私无忧 已于 2022-10-09 20:47:37 修改
1. 向量的点积与叉积
1.1 向量的点积
数量积又称标量积(Scalar product)、点积(Dot product),在欧几里得空间(Euclidean space)中称为内积(Inner product),对应元素相乘相加,结果是一个标量(即一个数)。
对于向量 a = ( a 1 , a 2 ) \mathbf{a} = (a_1, a_2) a=(a1,a2), b = ( b 1 , b 2 ) \mathbf{b} = (b_1, b_2) b=(b1,b2),两者的数量积为:
a ⋅ b = a 1 b 1 + a 2 b 2 \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 a⋅b=a1b1+a2b2
a ⋅ b \mathbf{a} \cdot \mathbf{b} a⋅b 的几何意义是 a \mathbf{a} a 在 b \mathbf{b} b 方向上的投影(仅在二维、三维空间向量有意义):
a ⋅ b = ∥ a ∥ ∥ b ∥ cos ( θ ) \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos(\theta) a⋅b=∥a∥∥b∥cos(θ)
其中, ∥ a ∥ \|\mathbf{a}\| ∥a∥、 ∥ b ∥ \|\mathbf{b}\| ∥b∥ 分别为向量 a \mathbf{a} a、 b \mathbf{b} b 的模, θ \theta θ 为向量 a \mathbf{a} a、 b \mathbf{b} b 的夹角。
对于 n n n 维向量 a = ( a 1 , a 2 , … , a n ) \mathbf{a} = (a_1, a_2, \dots, a_n) a=(a1,a2,…,an), b = ( b 1 , b 2 , … , b n ) \mathbf{b} = (b_1, b_2, \dots, b_n) b=(b1,b2,…,bn),两者的数量积为:
a ⋅ b = a 1 b 1 + a 2 b 2 + ⋯ + a n b n \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + \dots + a_n b_n a⋅b=a1b1+a2b2+⋯+anbn
numpy 中使用
np.dot或numpy.inner()实现向量的点积
举例
a = ( 1 , 2 , 3 ) , b = ( 4 , 5 , 6 ) \mathbf{a} = (1, 2, 3), \quad \mathbf{b} = (4, 5, 6) a=(1,2,3),b=(4,5,6)
a ⋅ b = 1 × 4 + 2 × 5 + 3 × 6 = 32 \mathbf{a} \cdot \mathbf{b} = 1 \times 4 + 2 \times 5 + 3 \times 6 = 32 a⋅b=1×4+2×5+3×6=32
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
## 数量积 使用 np.dot 或 np.inner
print(np.dot(a, b))
1.2 向量的叉积
向量积又称矢量积(Vector product)、叉积(Cross product)、外积(Outer product),结果是一个向量。
对于向量 a = ( a 1 , a 2 , a 3 ) \mathbf{a} = (a_1, a_2, a_3) a=(a1,a2,a3), b = ( b 1 , b 2 , b 3 ) \mathbf{b} = (b_1, b_2, b_3) b=(b1,b2,b3),两者的叉积为 a \mathbf{a} a 和 b \mathbf{b} b 的法向量,该向量垂直于 a \mathbf{a} a 和 b \mathbf{b} b 构成的平面:
a × b = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} a×b= ia1b1ja2b2ka3b3
= ( a 2 b 3 − b 2 a 3 ) i − ( a 1 b 3 − b 1 a 3 ) j + ( a 1 b 2 − b 1 a 2 ) k = (a_2 b_3 - b_2 a_3) \mathbf{i} - (a_1 b_3 - b_1 a_3) \mathbf{j} + (a_1 b_2 - b_1 a_2) \mathbf{k} =(a2b3−b2a3)i−(a1b3−b1a3)j+(a1b2−b1a2)k
其中, i \mathbf{i} i、 j \mathbf{j} j、 k \mathbf{k} k 分别是 X X X、 Y Y Y、 Z Z Z 轴方向的单位向量。
该向量的模:
∥ a × b ∥ = ∥ a ∥ ∥ b ∥ sin ( θ ) \|\mathbf{a} \times \mathbf{b}\| = \|\mathbf{a}\| \|\mathbf{b}\| \sin(\theta) ∥a×b∥=∥a∥∥b∥sin(θ)
其中, ∥ a ∥ \|\mathbf{a}\| ∥a∥、 ∥ b ∥ \|\mathbf{b}\| ∥b∥ 分别为向量 a \mathbf{a} a、 b \mathbf{b} b 的模, θ \theta θ 为向量 a \mathbf{a} a、 b \mathbf{b} b 的夹角。
即,叉积的长度 ∥ a × b ∥ \|\mathbf{a} \times \mathbf{b}\| ∥a×b∥ 为向量 a \mathbf{a} a、 b \mathbf{b} b 共起点时,构成平行四边形的面积。
numpy 中使用
np.cross实现向量的叉积
举例
a = ( 1 , 2 , 3 ) , b = ( 4 , 5 , 6 ) \mathbf{a} = (1, 2, 3), \quad \mathbf{b} = (4, 5, 6) a=(1,2,3),b=(4,5,6)
a × b = ( 2 × 6 − 3 × 5 , 4 × 3 − 1 × 6 , 1 × 5 − 2 × 4 ) = ( − 3 , 6 , − 3 ) \mathbf{a} \times \mathbf{b} = (2 \times 6 - 3 \times 5, 4 \times 3 - 1 \times 6, 1 \times 5 - 2 \times 4) = (-3, 6, -3) a×b=(2×6−3×5,4×3−1×6,1×5−2×4)=(−3,6,−3)
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
## 叉积 使用 np.cross
print(np.cross(a, b))
点积与叉积小结:
| 名称 | 点积 / 数量积 / 标量积 / 内积 / | 叉积 / 向量积 / 矢量积 / 外积 / |
|---|---|---|
| 输入(以 R 3 R^3 R3 为例) | a = ( a 1 , a 2 , a 3 ) \mathbf{a} = (a_1, a_2, a_3) a=(a1,a2,a3), b = ( b 1 , b 2 , b 3 ) \mathbf{b} = (b_1, b_2, b_3) b=(b1,b2,b3) | a = ( a 1 , a 2 , a 3 ) \mathbf{a} = (a_1, a_2, a_3) a=(a1,a2,a3), b = ( b 1 , b 2 , b 3 ) \mathbf{b} = (b_1, b_2, b_3) b=(b1,b2,b3) |
| 运算 | a ⋅ b = a 1 b 1 + a 2 b 2 + a 3 b 3 \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + a_3 b_3 a⋅b=a1b1+a2b2+a3b3 | a × b = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} a×b= ia1b1ja2b2ka3b3 |
| 输出 | 数值(标量): ∣ a ∣ ∣ b ∣ cos ( θ ) |\mathbf{a}| |\mathbf{b}| \cos(\theta) ∣a∣∣b∣cos(θ) | 向量(矢量): ∣ a ∣ ∣ b ∣ sin ( θ ) |\mathbf{a}| |\mathbf{b}| \sin(\theta) ∣a∣∣b∣sin(θ) |
注:数量、向量常用于数学;而标量、矢量常用于物理
2 矩阵的点积与叉积
2.1 矩阵的点积
对于 A A A 矩阵( m × s m \times s m×s 阶), B B B 矩阵( s × n s \times n s×n 阶)( A A A 的列数与 B B B 的行数相等),
A = [ a 11 a 12 ⋯ a 1 s a 21 a 22 ⋯ a 2 s ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m s ] , B = [ b 11 b 12 ⋯ b 1 n b 21 b 22 ⋯ b 2 n ⋮ ⋮ ⋱ ⋮ b s 1 b s 2 ⋯ b s n ] A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1s} \\ a_{21} & a_{22} & \cdots & a_{2s} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{ms} \end{bmatrix}, \quad B = \begin{bmatrix} b_{11} & b_{12} & \cdots & b_{1n} \\ b_{21} & b_{22} & \cdots & b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ b_{s1} & b_{s2} & \cdots & b_{sn} \end{bmatrix} A= a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1sa2s⋮ams ,B= b11b21⋮bs1b12b22⋮bs2⋯⋯⋱⋯b1nb2n⋮bsn
两者的点积,即矩阵相乘的结果 C = A B C = AB C=AB 是 m × n m \times n m×n 阶矩阵,
C = A B = [ c 11 c 12 ⋯ c 1 n c 21 c 22 ⋯ c 2 n ⋮ ⋮ ⋱ ⋮ c m 1 c m 2 ⋯ c m n ] C = AB = \begin{bmatrix} c_{11} & c_{12} & \cdots & c_{1n} \\ c_{21} & c_{22} & \cdots & c_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ c_{m1} & c_{m2} & \cdots & c_{mn} \end{bmatrix} C=AB= c11c21⋮cm1c12c22⋮cm2⋯⋯⋱⋯c1nc2n⋮cmn
其中,矩阵 C C C 中的元素满足
c i j = ∑ k = 1 s a i k b k j c_{ij} = \sum_{k=1}^{s} a_{ik} b_{kj} cij=k=1∑saikbkj
举例
A 1 = [ 1 2 3 4 ] , B 1 = [ 5 6 7 8 ] A_1 = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B_1 = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A1=[1324],B1=[5768]
A 2 = [ 1 2 3 1 2 3 ] , B 2 = [ 1 2 3 ] A_2 = \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{bmatrix}, \quad B_2 = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} A2=[112233],B2= 123
A 1 B 1 = [ 19 22 43 50 ] , A 2 B 2 = [ 14 14 ] A_1 B_1 = \begin{bmatrix} 19 & 22 \\ 43 & 50 \end{bmatrix}, \quad A_2 B_2 = \begin{bmatrix} 14 \\ 14 \end{bmatrix} A1B1=[19432250],A2B2=[1414]
numpy 实现
import numpy as np
A1 = np.array([[1, 2], [3, 4]])
B1 = np.array([[5, 6], [7, 8]])
A2 = np.array([[1, 2, 3], [1, 2, 3]])
B2 = np.array([1, 2, 3])
## 数量积 使用 np.dot
print(np.dot(A1, B1))
print(np.dot(A2, B2))
此外,numpy 提供了 numpy.inner() 函数,从字面意思理解是内积,其针对向量 numpy.inner() 与 numpy.dot() 输出一致,但针对矩阵有所不同。
print(np.inner(A1, B1))
输出为
[ 17 23 39 53 ] \begin{bmatrix} 17 & 23 \\ 39 & 53 \end{bmatrix} [17392353]
其中,
17 = 1 × 5 + 2 × 6 , 23 = 1 × 7 + 2 × 8 17 = 1 \times 5 + 2 \times 6, \quad 23 = 1 \times 7 + 2 \times 8 17=1×5+2×6,23=1×7+2×8
39 = 3 × 5 + 4 × 6 , 53 = 3 × 7 + 4 × 8 39 = 3 \times 5 + 4 \times 6, \quad 53 = 3 \times 7 + 4 \times 8 39=3×5+4×6,53=3×7+4×8
print(np.inner(A2, B2))
输出为
[ 14 14 ] \begin{bmatrix} 14 \\ 14 \end{bmatrix} [1414]
2.2 矩阵的叉积
针对矩阵并不存在叉积的概念,numpy 中针对矩阵的叉积运算是按照向量的叉积进行运算。
举例
A 1 = [ 1 2 3 4 ] , B 1 = [ 5 6 7 8 ] A_1 = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B_1 = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A1=[1324],B1=[5768]
A 2 = [ 1 2 3 1 2 3 ] , B 2 = [ 1 2 3 ] A_2 = \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{bmatrix}, \quad B_2 = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} A2=[112233],B2= 123
A 1 × B 1 = [ − 4 − 4 ] , A 2 × B 2 = [ 0 0 0 0 0 0 ] A_1 \times B_1 = \begin{bmatrix} -4 \\ -4 \end{bmatrix}, \quad A_2 \times B_2 = \begin{bmatrix} 0 \\ 0 \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix} A1×B1=[−4−4],A2×B2= 000000
numpy 实现
import numpy as np
A1 = np.array([[1, 2], [3, 4]])
B1 = np.array([[5, 6], [7, 8]])
A2 = np.array([[1, 2, 3], [1, 2, 3]])
B2 = np.array([1, 2, 3])
## 叉积 使用 np.cross
print(np.cross(A1, B1))
print(np.cross(A2, B2))
3. 元素积
元素积(element-wise product, point-wise product) 又称 哈达玛积(Hadamard product)、舒尔积、逐项积,对应元素相乘,结果还是向量/矩阵。
对于 n n n 维向量 a = ( a 1 , a 2 , … , a n ) \mathbf{a} = (a_1, a_2, \dots, a_n) a=(a1,a2,…,an), b = ( b 1 , b 2 , … , b n ) \mathbf{b} = (b_1, b_2, \dots, b_n) b=(b1,b2,…,bn),两者的元素积为:
a ∗ b = ( a 1 b 1 , a 2 b 2 , … , a n b n ) \mathbf{a} * \mathbf{b} = (a_1 b_1, a_2 b_2, \dots, a_n b_n) a∗b=(a1b1,a2b2,…,anbn)
对于同阶矩阵 A A A( m × n m \times n m×n 阶), B B B( m × n m \times n m×n 阶),两者的哈达玛积为:
A ∘ B = [ a 11 b 11 a 12 b 12 ⋯ a 1 n b 1 n a 21 b 21 a 22 b 22 ⋯ a 2 n b 2 n ⋮ ⋮ ⋱ ⋮ a m 1 b m 1 a m 2 b m 2 ⋯ a m n b m n ] A \circ B = \begin{bmatrix} a_{11} b_{11} & a_{12} b_{12} & \cdots & a_{1n} b_{1n} \\ a_{21} b_{21} & a_{22} b_{22} & \cdots & a_{2n} b_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} b_{m1} & a_{m2} b_{m2} & \cdots & a_{mn} b_{mn} \end{bmatrix} A∘B= a11b11a21b21⋮am1bm1a12b12a22b22⋮am2bm2⋯⋯⋱⋯a1nb1na2nb2n⋮amnbmn
numpy 中使用
np.multiply或*实现元素积
举例
向量:
a = ( 1 , 2 , 3 ) , b = ( 4 , 5 , 6 ) \mathbf{a} = (1, 2, 3), \quad \mathbf{b} = (4, 5, 6)\\ a=(1,2,3),b=(4,5,6)
a ∘ b = ( 4 , 10 , 18 ) \mathbf{a} \circ \mathbf{b} = (4, 10, 18) a∘b=(4,10,18)
矩阵:
A 1 = [ 1 2 3 4 ] , B 1 = [ 5 6 7 8 ] A_1 = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B_1 = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A1=[1324],B1=[5768]
A 2 = [ 1 2 3 1 2 3 ] , B 2 = [ 1 2 3 ] A_2 = \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{bmatrix}, \quad B_2 = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} A2=[112233],B2= 123
A 1 ∘ B 1 = [ 5 12 21 32 ] , A 2 ∘ B 2 = [ 1 4 9 1 4 9 ] A_1 \circ B_1 = \begin{bmatrix} 5 & 12 \\ 21 & 32 \end{bmatrix}, \quad A_2 \circ B_2 = \begin{bmatrix} 1 & 4 & 9 \\ 1 & 4 & 9 \end{bmatrix} A1∘B1=[5211232],A2∘B2=[114499]
numpy 实现
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
A1 = np.array([[1, 2], [3, 4]])
B1 = np.array([[5, 6], [7, 8]])
A2 = np.array([[1, 2, 3], [1, 2, 3]])
B2 = np.array([1, 2, 3])
## 元素积 使用 np.multiply 或 *
print(np.multiply(a, b))
print(np.multiply(A1, B1))
print(np.multiply(A2, B2)) # 阶数不一致的,numpy 将进行广播确保一致
4. 克罗内克积
克罗内克积(Kronecker product)是 两个任意大小的矩阵间的运算。
对于 A A A 矩阵( m × n m \times n m×n 阶), B B B 矩阵( p × q p \times q p×q 阶):
A = [ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a m 1 a m 2 ⋯ a m n ] , B = [ b 11 b 12 ⋯ b 1 q b 21 b 22 ⋯ b 2 q ⋮ ⋮ ⋱ ⋮ b p 1 b p 2 ⋯ b p q ] A = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix}, \quad B = \begin{bmatrix} b_{11} & b_{12} & \cdots & b_{1q} \\ b_{21} & b_{22} & \cdots & b_{2q} \\ \vdots & \vdots & \ddots & \vdots \\ b_{p1} & b_{p2} & \cdots & b_{pq} \end{bmatrix} A= a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯a1na2n⋮amn ,B= b11b21⋮bp1b12b22⋮bp2⋯⋯⋱⋯b1qb2q⋮bpq
两者的克罗内克积 C = A ⊗ B C = A \otimes B C=A⊗B 是 m p × n q mp \times nq mp×nq 阶的分块矩阵:
C = A ⊗ B = [ a 11 B a 12 B ⋯ a 1 n B a 21 B a 22 B ⋯ a 2 n B ⋮ ⋮ ⋱ ⋮ a m 1 B a m 2 B ⋯ a m n B ] C = A \otimes B = \begin{bmatrix} a_{11} B & a_{12} B & \cdots & a_{1n} B \\ a_{21} B & a_{22} B & \cdots & a_{2n} B \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} B & a_{m2} B & \cdots & a_{mn} B \end{bmatrix} C=A⊗B= a11Ba21B⋮am1Ba12Ba22B⋮am2B⋯⋯⋱⋯a1nBa2nB⋮amnB
更具体而言:
C = [ a 11 b 11 a 11 b 12 ⋯ a 11 b 1 q ⋯ ⋯ a 1 n b 11 a 1 n b 12 ⋯ a 1 n b 1 q a 11 b 21 a 11 b 22 ⋯ a 11 b 2 q ⋯ ⋯ a 1 n b 21 a 1 n b 22 ⋯ a 1 n b 2 q ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a 11 b p 1 a 11 b p 2 ⋯ a 11 b p q ⋯ ⋯ a 1 n b p 1 a 1 n b p 2 ⋯ a 1 n b p q ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ a m 1 b 11 a m 1 b 12 ⋯ a m 1 b 1 q ⋯ ⋯ a m n b 11 a m n b 12 ⋯ a m n b 1 q a m 1 b 21 a m 1 b 22 ⋯ a m 1 b 2 q ⋯ ⋯ a m n b 21 a m n b 22 ⋯ a m n b 2 q ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a m 1 b p 1 a m 1 b p 2 ⋯ a m 1 b p q ⋯ ⋯ a m n b p 1 a m n b p 2 ⋯ a m n b p q ] C = \begin{bmatrix} a_{11} b_{11} & a_{11} b_{12} & \cdots & a_{11} b_{1q} & \cdots & \cdots & a_{1n} b_{11} & a_{1n} b_{12} & \cdots & a_{1n} b_{1q} \\ a_{11} b_{21} & a_{11} b_{22} & \cdots & a_{11} b_{2q} & \cdots & \cdots & a_{1n} b_{21} & a_{1n} b_{22} & \cdots & a_{1n} b_{2q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ a_{11} b_{p1} & a_{11} b_{p2} & \cdots & a_{11} b_{pq} & \cdots & \cdots & a_{1n} b_{p1} & a_{1n} b_{p2} & \cdots & a_{1n} b_{pq} \\ \vdots & \vdots & & \vdots & \ddots & & \vdots & \vdots & & \vdots \\ \vdots & \vdots & & \vdots & & \ddots & \vdots & \vdots & & \vdots \\ a_{m1} b_{11} & a_{m1} b_{12} & \cdots & a_{m1} b_{1q} & \cdots & \cdots & a_{mn} b_{11} & a_{mn} b_{12} & \cdots & a_{mn} b_{1q} \\ a_{m1} b_{21} & a_{m1} b_{22} & \cdots & a_{m1} b_{2q} & \cdots & \cdots & a_{mn} b_{21} & a_{mn} b_{22} & \cdots & a_{mn} b_{2q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ a_{m1} b_{p1} & a_{m1} b_{p2} & \cdots & a_{m1} b_{pq} & \cdots & \cdots & a_{mn} b_{p1} & a_{mn} b_{p2} & \cdots & a_{mn} b_{pq} \end{bmatrix} C= a11b11a11b21⋮a11bp1⋮⋮am1b11am1b21⋮am1bp1a11b12a11b22⋮a11bp2⋮⋮am1b12am1b22⋮am1bp2⋯⋯⋱⋯⋯⋯⋱⋯a11b1qa11b2q⋮a11bpq⋮⋮am1b1qam1b2q⋮am1bpq⋯⋯⋯⋱⋯⋯⋯⋯⋯⋯⋱⋯⋯⋯a1nb11a1nb21⋮a1nbp1⋮⋮amnb11amnb21⋮amnbp1a1nb12a1nb22⋮a1nbp2⋮⋮amnb12amnb22⋮amnbp2⋯⋯⋱⋯⋯⋯⋱⋯a1nb1qa1nb2q⋮a1nbpq⋮⋮amnb1qamnb2q⋮amnbpq
numpy 中使用
np.kron实现
举例
A 1 = [ 1 2 3 ] , B 1 = [ 4 5 6 ] A_1 = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}, \quad B_1 = \begin{bmatrix} 4 \\ 5 \\ 6 \end{bmatrix} A1= 123 ,B1= 456
A 2 = [ 1 2 3 4 ] , B 2 = [ 5 6 7 8 ] A_2 = \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad B_2 = \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} A2=[1324],B2=[5768]
A 3 = [ 1 2 3 1 2 3 ] , B 3 = [ 1 2 3 ] A_3 = \begin{bmatrix} 1 & 2 & 3 \\ 1 & 2 & 3 \end{bmatrix}, \quad B_3 = \begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix} A3=[112233],B3= 123
A 1 ⊗ B 1 = [ 4 5 6 8 10 12 12 15 18 ] A_1 \otimes B_1 = \begin{bmatrix} 4 & 5 & 6 \\ 8 & 10 & 12 \\ 12 & 15 & 18 \end{bmatrix} A1⊗B1= 48125101561218
A 2 ⊗ B 2 = [ 5 6 10 12 7 8 14 16 15 18 20 24 21 24 28 32 ] A_2 \otimes B_2 = \begin{bmatrix} 5 & 6 & 10 & 12 \\ 7 & 8 & 14 & 16 \\ 15 & 18 & 20 & 24 \\ 21 & 24 & 28 & 32 \end{bmatrix} A2⊗B2= 5715216818241014202812162432
A 3 ⊗ B 3 = [ 1 2 3 2 4 6 3 6 9 1 2 3 2 4 6 3 6 9 ] A_3 \otimes B_3 = \begin{bmatrix} 1 & 2 & 3 & 2 & 4 & 6 & 3 & 6 & 9 \\ 1 & 2 & 3 & 2 & 4 & 6 & 3 & 6 & 9 \end{bmatrix} A3⊗B3=[112233224466336699]
numpy 实现
import numpy as np
A1 = np.array([1, 2, 3])
B1 = np.array([4, 5, 6])
A2 = np.array([[1, 2], [3, 4]])
B2 = np.array([[5, 6], [7, 8]])
A3 = np.array([[1, 2, 3], [1, 2, 3]])
B3 = np.array([1, 2, 3])
## 克罗内克积 使用 np.kron
print(np.kron(A1, B1))
print(np.kron(A2, B2))
print(np.kron(A3, B3))
点积、叉积、内积、外积【汇总对比】
Dust_Evc 于
2022-10-24 21:39:26 发布
点积(Dot Product)
又称标量积、数量积(Scalar Product)。它是两个数字序列对应条目乘积的和。在欧几里得几何里,两个向量笛卡尔坐标的点积应用广泛。它常被称作欧几里得空间的内积(或极少被称为投影积),是内积的一种特殊情形,不过并非是能在欧几里得空间上定义的唯一内积。
从代数角度看,点积是两个数字序列对应条目乘积的和;从几何角度看,它是两个向量的欧几里得模长与它们夹角余弦的乘积。当使用笛卡尔坐标时,这两种定义是等价的。在现代几何中,欧几里得空间通常借助向量空间来定义。此时,点积被用于定义长度(向量的长度是该向量自身点积的平方根)和角度(两个向量夹角的余弦等于它们的点积与它们模长乘积的商)。
代数定义

几何定义

与内积的关系

叉积(Cross Product)
或向量积(Vector Product)(有时也称为有向面积积,以突出其几何意义),是在三维有向欧几里得向量空间中定义的运算,用符号
× \times × 表示。给定两个线性无关的向量 a \mathbf{a} a 和 b \mathbf{b} b ,叉积 a × b \mathbf{a} \times \mathbf{b} a×b (读作“ a a a cross b b b ”)是一个垂直于 a \mathbf{a} a 和 b \mathbf{b} b 的向量,因而也垂直于包含它们的平面。
定义

下图为使用 Sarrus 规则得到
a
\mathbf{a}
a 和
b
\mathbf{b}
b 的叉积:

叉积也可表示为形式行列式:
a × b = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} a×b= ia1b1ja2b2ka3b3
该行列式可通过 Sarrus 规则或余子式展开来计算。利用 Sarrus 规则,其展开式为:
a × b = ( a 2 b 3 i + a 3 b 1 j + a 1 b 2 k ) − ( a 3 b 2 i + a 1 b 3 j + a 2 b 1 k ) = ( a 2 b 3 − a 3 b 2 ) i + ( a 3 b 1 − a 1 b 3 ) j + ( a 1 b 2 − a 2 b 1 ) k \begin{align*} \mathbf{a}\times \mathbf{b} & =({{a}_{2}}{{b}_{3}}\mathbf{i}+{{a}_{3}}{{b}_{1}}\mathbf{j}+{{a}_{1}}{{b}_{2}}\mathbf{k})-({{a}_{3}}{{b}_{2}}\mathbf{i}+{{a}_{1}}{{b}_{3}}\mathbf{j}+{{a}_{2}}{{b}_{1}}\mathbf{k}) \\ & =({{a}_{2}}{{b}_{3}}-{{a}_{3}}{{b}_{2}})\mathbf{i}+({{a}_{3}}{{b}_{1}}-{{a}_{1}}{{b}_{3}})\mathbf{j}+({{a}_{1}}{{b}_{2}}-{{a}_{2}}{{b}_{1}})\mathbf{k} \end{align*} a×b=(a2b3i+a3b1j+a1b2k)−(a3b2i+a1b3j+a2b1k)=(a2b3−a3b2)i+(a3b1−a1b3)j+(a1b2−a2b1)k
沿第一行用余子式展开,展开式为:
a × b = ∣ a 2 a 3 b 2 b 3 ∣ i − ∣ a 1 a 3 b 1 b 3 ∣ j + ∣ a 1 a 2 b 1 b 2 ∣ k = ( a 2 b 3 − a 3 b 2 ) i − ( a 1 b 3 − a 3 b 1 ) j + ( a 1 b 2 − a 2 b 1 ) k \begin{align*} \mathbf{a} \times \mathbf{b} &= \begin{vmatrix} a_2 & a_3 \\ b_2 & b_3 \end{vmatrix} \mathbf{i} - \begin{vmatrix} a_1 & a_3 \\ b_1 & b_3 \end{vmatrix} \mathbf{j} + \begin{vmatrix} a_1 & a_2 \\ b_1 & b_2 \end{vmatrix} \mathbf{k} \\ &= (a_2 b_3 - a_3 b_2)\mathbf{i} - (a_1 b_3 - a_3 b_1)\mathbf{j} + (a_1 b_2 - a_2 b_1)\mathbf{k} \end{align*} a×b= a2b2a3b3 i− a1b1a3b3 j+ a1b1a2b2 k=(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)k
这直接给出了结果的分量。
几何意义

内积(Inner Product)
空间中两个向量的内积是一个标量,通常用尖括号(如 $\langle \cdot,
\cdot \rangle$ )表示。内积空间是欧几里得向量空间的推广,在欧几里得向量空间中,内积就是笛卡尔坐标的点积或标量积。
无穷维内积空间在泛函分析中应用广泛。复数域上的内积空间有时被称为酉空间。向量空间中内积概念的首次使用归功于朱塞佩·皮亚诺(Giuseppe Peano),于1898年提出。

使用内积定义的两个向量之间角度的几何解释( $\vert \mathbf{x}
\vert$ 与 ∣ y ∣ \vert \mathbf{y} \vert ∣y∣ 为范数在二维、三维空间的表现)。
定义

例子

外积(Outer Product)
在线性代数里,两个坐标向量的外积是一个矩阵。若这两个向量的维度分别为 n n n 和 m m m ,那么它们的外积是一个 n × m n \times m n×m 的矩阵。更一般地,给定两个张量(多维数字数组),它们的外积是张量。张量的外积也被称为张量积,可用于定义张量代数。
定义

与欧几里得内积对比

张量的外积

向量的内积与外积
木木 发布于 2019-11-11 23:18
一、向量的内积和几何意义(点乘)
对于向量 a \mathbf{a} a 和向量 b \mathbf{b} b:
a = [ a 1 , a 2 , … a n ] b = [ b 1 , b 2 , … b n ] \begin{align*} & a=\left[ {{a}_{1}},{{a}_{2}},\ldots {{a}_{n}} \right] \\ & b=\left[ {{b}_{1}},{{b}_{2}},\ldots {{b}_{n}} \right] \\ \end{align*} a=[a1,a2,…an]b=[b1,b2,…bn]
-
a \mathbf{a} a 和 b \mathbf{b} b 的内积公式为:
a ⋅ b = a 1 b 1 + a 2 b 2 + a 3 b 3 \mathbf{a} \cdot \mathbf{b} = a_1 b_1 + a_2 b_2 + a_3 b_3 a⋅b=a1b1+a2b2+a3b3
要求一维向量 a \mathbf{a} a 和向量 b \mathbf{b} b 的行列数相同。
-
内积的几何意义
点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在 b \mathbf{b} b 向量在 a \mathbf{a} a 向量方向上的投影。
二、向量的外积和几何意义(叉乘)
两个向量的外积,又叫向量积、叉乘等。外积的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。
对于向量 a \mathbf{a} a 和向量 b \mathbf{b} b:
a = ( x 1 , y 1 , z 1 ) b = ( x 2 , y 2 , z 2 ) \begin{align*} & a=\left( {{x}_{1}},{{y}_{1}},{{z}_{1}} \right) \\ & b=\left( {{x}_{2}},{{y}_{2}},{{z}_{2}} \right) \\ \end{align*} a=(x1,y1,z1)b=(x2,y2,z2)
-
a \mathbf{a} a 和 b \mathbf{b} b 的外积公式为:
a × b = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} a×b= ia1b1ja2b2ka3b3
其中:
i = ( 1 , 0 , 0 ) , j = ( 0 , 1 , 0 ) , k = ( 0 , 0 , 1 ) \mathbf{i} = (1, 0, 0), \quad \mathbf{j} = (0, 1, 0), \quad \mathbf{k} = (0, 0, 1) i=(1,0,0),j=(0,1,0),k=(0,0,1)
根据 i \mathbf{i} i、 j \mathbf{j} j、 k \mathbf{k} k 间关系,有:
a × b = ( a 2 b 3 − a 3 b 2 ) i − ( a 1 b 3 − a 3 b 1 ) j + ( a 1 b 2 − a 2 b 1 ) k \mathbf{a} \times \mathbf{b} = (a_2 b_3 - a_3 b_2) \mathbf{i} - (a_1 b_3 - a_3 b_1) \mathbf{j} + (a_1 b_2 - a_2 b_1) \mathbf{k} a×b=(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)k
-
叉乘几何意义
在三维几何中,向量 a \mathbf{a} a 和向量 b \mathbf{b} b 的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于 a \mathbf{a} a 和 b \mathbf{b} b 向量构成的平面。
真一文搞懂:内积、外积及其衍生(内积:点积、数量积、标量积;外积:叉积、叉乘、向量积、张量积)
我头上有犄角 编辑于 2024-03-08 09:44・广东
首先说明一下,内积 和 外积 都是一种 广义的称呼,我们 最常见的内积是点积(数量积、标量积和点积定义相同),即对应元素乘然后累加;而我们最容易弄错外积的定义,我们理解的两个向量运算得到第三个向量,且其方向垂直于另外两个向量的运算严格上叫叉积、叉乘、向量积。
而非外积,外积有其单独定义,其对向量运算的结果为矩阵。
首先假设有以下两个向量:
a = [ a 1 a 2 a 3 ] , b = [ b 1 b 2 b 3 ] \mathbf{a} = \begin{bmatrix} a_1 \\ a_2 \\ a_3 \end{bmatrix}, \quad \mathbf{b} = \begin{bmatrix} b_1 \\ b_2 \\ b_3 \end{bmatrix} a= a1a2a3 ,b= b1b2b3
一、内积(点积、数量积、标量积)
欧氏空间中 内积 的定义一般没有什么歧义,比较相似的 内乘 一词定义为向量空间和外代数中,和流型相关。而点积和内积的具体关系如下:

内积定义比点积宽泛,内积在欧氏空间中则被称为点积。
在线性代数中,内积是定义在向量空间上的一种运算,它通常满足对称性、线性性和正定性。内积 最常见的形式是 欧氏空间 中的内积,也就是常说的 点积(dot product),点积也被称为 数量积、标量积。
注:以下我们所提到的内积均指的是欧氏空间中的内积,即点积。
1. 内积的表示
dot ( a , b ) = a 1 b 1 + a 2 b 2 + a 3 b 3 \text{dot}(\mathbf{a}, \mathbf{b}) = a_1 b_1 + a_2 b_2 + a_3 b_3 dot(a,b)=a1b1+a2b2+a3b3
还有一种表示形式为
dot ( a , b ) = ∥ a ∥ ∥ b ∥ cos ( θ ) \text{dot}(\mathbf{a}, \mathbf{b}) = \|\mathbf{a}\| \|\mathbf{b}\| \cos(\theta) dot(a,b)=∥a∥∥b∥cos(θ)
2. 内积的意义
投影和分解:点积可以用来描述一个向量在另一个向量方向上的投影。给定两个向量 a \mathbf{a} a 和 b \mathbf{b} b,它们的点积 a ⋅ b \mathbf{a} \cdot \mathbf{b} a⋅b 表示 a \mathbf{a} a 在 b \mathbf{b} b 方向上的投影的长度,或者 b \mathbf{b} b 在 a \mathbf{a} a 方向上的投影的长度。这在物理学和工程学中经常用于分解力、速度、加速度等向量。
几何关系:点积可以用来计算向量之间的夹角, a ⋅ b = ∥ a ∥ ∥ b ∥ cos ( θ ) \mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \cos(\theta) a⋅b=∥a∥∥b∥cos(θ),其中 cos ( θ ) \cos(\theta) cos(θ) 是 a \mathbf{a} a 和 b \mathbf{b} b 之间的夹角。通过这个公式可以比较容易地计算出两个向量之间的角度。
相关性:内积可以理解为表示了两个向量之间的相干性,若两个向量正交(无相干性),则点积为 0;而点积越大表示两个向量的相干性越强(但局限性是这点相干性只和角度有关,和 a \mathbf{a} a 和 b \mathbf{b} b 的长度值无关)。在信号处理和模式识别以及深度学习方法中常用到这种方式来计算信号之间的相似度或相关性。
基向量:通过投影这种方式我们可以将一个向量从一个基投影到另一个基,假如一个向量本身在三维空间(三个基),它原本的基为
二、外积(叉积、叉乘、向量积)
外积是更广义的说法,宽松的说,它在一定的语境中和叉积、叉乘、向量积都表示求垂直于两个向量的新向量,但是在更严格的语境中

广义上外积的分类
外积可以分为以下几种含义,维基百科中注明了这几个的差别:
- External product,又名 叉积(英语:cross product)和 向量积(英语:vector product),常写为 a × b \mathbf{a} \times \mathbf{b} a×b
- Exterior product,又名 楔积(英语:wedge product),常写为 a ∧ b \mathbf{a} \wedge \mathbf{b} a∧b
- Outer product,见 外积 (张量积),常写为 a ⊗ b \mathbf{a} \otimes \mathbf{b} a⊗b
接下来我们一个一个区分它们
1. 叉积、叉乘、向量积
在 数学 和 向量代数 领域,外积(external product)又称 叉积、叉乘、向量积,是对 三维空间 中的两个向量的二元运算,英文中的 (external, cross, vector) product 均为此定义,同时也是最广为人知的一个外积的定义,此外积仅在三维空间中定义。
外积 a × b \mathbf{a} \times \mathbf{b} a×b 是与 a \mathbf{a} a 和 b \mathbf{b} b 都垂直的向量。其方向由右手定则决定,模长等于以两个向量为边的平行四边形的面积。公式定义为:
a × b = ∥ a ∥ ∥ b ∥ sin ( θ ) n \mathbf{a} \times \mathbf{b} = \|\mathbf{a}\| \|\mathbf{b}\| \sin(\theta) \mathbf{n} a×b=∥a∥∥b∥sin(θ)n
其中 n \mathbf{n} n 表示垂直于 a \mathbf{a} a 和 b \mathbf{b} b 的单位向量 ( i \mathbf{i} i, j \mathbf{j} j, k \mathbf{k} k),具体来说,其结果为以下行列式:
a × b = ∣ i j k a 1 a 2 a 3 b 1 b 2 b 3 ∣ \mathbf{a} \times \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{vmatrix} a×b= ia1b1ja2b2ka3b3
结果为:
a × b = ( a 2 b 3 − a 3 b 2 ) i − ( a 1 b 3 − a 3 b 1 ) j + ( a 1 b 2 − a 2 b 1 ) k \mathbf{a} \times \mathbf{b} = (a_2 b_3 - a_3 b_2) \mathbf{i} - (a_1 b_3 - a_3 b_1) \mathbf{j} + (a_1 b_2 - a_2 b_1) \mathbf{k} a×b=(a2b3−a3b2)i−(a1b3−a3b1)j+(a1b2−a2b1)k
2. 楔积
此定义为外代数中的内容,一种将两个向量(或更高阶的对象)结合成一个新的几何对象的运算。楔积的结果可以表示 面积、体积 或 更高维形式 的概念,在 几何、物理学 和 微分几何 中有广泛的应用。
对于两个向量 a \mathbf{a} a 和 b \mathbf{b} b,它们的楔积 a ∧ b \mathbf{a} \wedge \mathbf{b} a∧b 可以表示为一个二阶外积(2-形式),它携带了这两个向量所张成的平行四边形的面积和方向信息。在三维空间中,楔积的结果可以通过如下矩阵的行列式来计算:
a ∧ b = ∣ i j k a x a y a z b x b y b z ∣ \mathbf{a} \wedge \mathbf{b} = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ a_x & a_y & a_z \\ b_x & b_y & b_z \end{vmatrix} a∧b= iaxbxjaybykazbz
其中 i \mathbf{i} i, j \mathbf{j} j, k \mathbf{k} k 是单位向量, a x a_x ax, a y a_y ay, a z a_z az 和 b x b_x bx, b y b_y by, b z b_z bz 分别是向量 a \mathbf{a} a 和 b \mathbf{b} b 的分量。
楔积(外积)和 叉积 虽然在三维空间中可以给出相似的几何信息,但它们在本质上是不同的数学对象,具有不同的属性和应用范围。这里是它们之间的一些 主要区别:
1. 数学性质:
- 楔积:楔积是一种在外代数中定义的运算,它可以应用于任意维度的空间,并且可以用来定义高阶的几何对象。楔积的结果是一个外积或外形式,不局限于向量,且在维度大于 3 时依然有效。楔积具有反对称性,即 a ∧ b = − b ∧ a \mathbf{a} \wedge \mathbf{b} = -\mathbf{b} \wedge \mathbf{a} a∧b=−b∧a。
- 叉积:叉积是一种特定于三维空间的运算,结果是一个新的向量,该向量垂直于原始两个向量所在的平面。叉积遵循右手定则,用于确定结果向量的方向。与楔积不同,叉积的结果并不在高维空间中有直接的对应。
2. 结果的性质:
- 楔积的结果 是一种代表有向面积的几何对象,称为 2-形式,在三维空间中它不直接等同于一个向量,但与由原向量构成的平面有关。
- 叉积的结果 是一个向量,这个向量自身有长度和方向,其长度可以代表原来两个向量形成的平行四边形的面积,方向垂直于这两个向量构成的平面,根据右手规则确定。
3. 应用领域:
- 楔积 在数学中的应用范围更广,特别是在微分几何、代数拓扑和物理中的某些领域,如电磁学和流体动力学。楔积用于定义和计算多维空间中的有向体积元素。
- 叉积 主要用于三维几何和物理学中,如用于计算力的矩、角动量以及在三维空间中寻找垂直于两个给定向量的向量。
3. 外积、张量积
外积(outer product),在线性代数中一般指两个向量的 张量积,其结果为一 矩阵;与外积相对,两向量的内积结果为 标量。
外积是一种 克罗内克积 的特殊情况,给定 m × 1 m \times 1 m×1 列向量 a \mathbf{a} a 和 1 × n 1 \times n 1×n 行向量 b \mathbf{b} b,它们的外积 a ⊗ b \mathbf{a} \otimes \mathbf{b} a⊗b 被定义为 m × n m \times n m×n 矩阵 C \mathbf{C} C,结果为:
a ⊗ b = C = a b \mathbf{a} \otimes \mathbf{b} = \mathbf{C} = \mathbf{a} \mathbf{b} a⊗b=C=ab
这里的外积即为张量积,张量积就是向量的乘法,使用坐标表示如下:
[ b 1 b 2 b 3 b 4 ] ⊗ [ a 1 a 2 a 3 ] = [ a 1 b 1 a 2 b 1 a 3 b 1 a 1 b 2 a 2 b 2 a 3 b 2 a 1 b 3 a 2 b 3 a 3 b 3 a 1 b 4 a 2 b 4 a 3 b 4 ] \begin{bmatrix} b_1 \\ b_2 \\ b_3 \\ b_4 \end{bmatrix} \otimes \begin{bmatrix} a_1 & a_2 & a_3 \end{bmatrix} = \begin{bmatrix} a_1 b_1 & a_2 b_1 & a_3 b_1 \\ a_1 b_2 & a_2 b_2 & a_3 b_2 \\ a_1 b_3 & a_2 b_3 & a_3 b_3 \\ a_1 b_4 & a_2 b_4 & a_3 b_4 \end{bmatrix} b1b2b3b4 ⊗[a1a2a3]= a1b1a1b2a1b3a1b4a2b1a2b2a2b3a2b4a3b1a3b2a3b3a3b4
外积是将结果的维度扩张到二维,而内积呢,其结果将维度缩减到了标量。
4. 补充:克罗内克积
数学上,克罗内克积是两个任意大小的矩阵间的运算。克罗内克积是张量积的特殊(拓展)形式,以德国数学家利奥波德·克罗内克命名。
A ⊗ B \mathbf{A} \otimes \mathbf{B} A⊗B,如果 A \mathbf{A} A 是一个 m × n m \times n m×n 的矩阵,而 B \mathbf{B} B 是一个 p × q p \times q p×q 的矩阵,克罗内克积则是一个 m p × n q mp \times nq mp×nq 的分块矩阵
A ⊗ B = [ a 11 B ⋯ a 1 n B ⋮ ⋱ ⋮ a m 1 B ⋯ a m n B ] \mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11} \mathbf{B} & \cdots & a_{1n} \mathbf{B} \\ \vdots & \ddots & \vdots \\ a_{m1} \mathbf{B} & \cdots & a_{mn} \mathbf{B} \end{bmatrix} A⊗B= a11B⋮am1B⋯⋱⋯a1nB⋮amnB
更具体而言:
A ⊗ B = [ a 11 b 11 a 11 b 12 ⋯ a 11 b 1 q ⋯ ⋯ a 1 n b 11 a 1 n b 12 ⋯ a 1 n b 1 q a 11 b 21 a 11 b 22 ⋯ a 11 b 2 q ⋯ ⋯ a 1 n b 21 a 1 n b 22 ⋯ a 1 n b 2 q ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a 11 b p 1 a 11 b p 2 ⋯ a 11 b p q ⋯ ⋯ a 1 n b p 1 a 1 n b p 2 ⋯ a 1 n b p q ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ a m 1 b 11 a m 1 b 12 ⋯ a m 1 b 1 q ⋯ ⋯ a m n b 11 a m n b 12 ⋯ a m n b 1 q a m 1 b 21 a m 1 b 22 ⋯ a m 1 b 2 q ⋯ ⋯ a m n b 21 a m n b 22 ⋯ a m n b 2 q ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a m 1 b p 1 a m 1 b p 2 ⋯ a m 1 b p q ⋯ ⋯ a m n b p 1 a m n b p 2 ⋯ a m n b p q ] \mathbf{A} \otimes \mathbf{B} = \begin{bmatrix} a_{11} b_{11} & a_{11} b_{12} & \cdots & a_{11} b_{1q} & \cdots & \cdots & a_{1n} b_{11} & a_{1n} b_{12} & \cdots & a_{1n} b_{1q} \\ a_{11} b_{21} & a_{11} b_{22} & \cdots & a_{11} b_{2q} & \cdots & \cdots & a_{1n} b_{21} & a_{1n} b_{22} & \cdots & a_{1n} b_{2q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ a_{11} b_{p1} & a_{11} b_{p2} & \cdots & a_{11} b_{pq} & \cdots & \cdots & a_{1n} b_{p1} & a_{1n} b_{p2} & \cdots & a_{1n} b_{pq} \\ \vdots & \vdots & & \vdots & \ddots & & \vdots & \vdots & & \vdots \\ \vdots & \vdots & & \vdots & & \ddots & \vdots & \vdots & & \vdots \\ a_{m1} b_{11} & a_{m1} b_{12} & \cdots & a_{m1} b_{1q} & \cdots & \cdots & a_{mn} b_{11} & a_{mn} b_{12} & \cdots & a_{mn} b_{1q} \\ a_{m1} b_{21} & a_{m1} b_{22} & \cdots & a_{m1} b_{2q} & \cdots & \cdots & a_{mn} b_{21} & a_{mn} b_{22} & \cdots & a_{mn} b_{2q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ a_{m1} b_{p1} & a_{m1} b_{p2} & \cdots & a_{m1} b_{pq} & \cdots & \cdots & a_{mn} b_{p1} & a_{mn} b_{p2} & \cdots & a_{mn} b_{pq} \end{bmatrix} A⊗B= a11b11a11b21⋮a11bp1⋮⋮am1b11am1b21⋮am1bp1a11b12a11b22⋮a11bp2⋮⋮am1b12am1b22⋮am1bp2⋯⋯⋱⋯⋯⋯⋱⋯a11b1qa11b2q⋮a11bpq⋮⋮am1b1qam1b2q⋮am1bpq⋯⋯⋯⋱⋯⋯⋯⋯⋯⋯⋱⋯⋯⋯a1nb11a1nb21⋮a1nbp1⋮⋮amnb11amnb21⋮amnbp1a1nb12a1nb22⋮a1nbp2⋮⋮amnb12amnb22⋮amnbp2⋯⋯⋱⋯⋯⋯⋱⋯a1nb1qa1nb2q⋮a1nbpq⋮⋮amnb1qamnb2q⋮amnbpq
例如:
[ 1 2 3 1 ] ⊗ [ 0 3 2 1 ] = [ 1 ⋅ 0 1 ⋅ 3 2 ⋅ 0 2 ⋅ 3 1 ⋅ 2 1 ⋅ 1 2 ⋅ 2 2 ⋅ 1 3 ⋅ 0 3 ⋅ 3 1 ⋅ 0 1 ⋅ 3 3 ⋅ 2 3 ⋅ 1 1 ⋅ 2 1 ⋅ 1 ] = [ 0 3 0 6 2 1 4 2 0 9 0 3 6 3 2 1 ] \begin{bmatrix} 1 & 2 \\ 3 & 1 \end{bmatrix} \otimes \begin{bmatrix} 0 & 3 \\ 2 & 1 \end{bmatrix} = \begin{bmatrix} 1 \cdot 0 & 1 \cdot 3 & 2 \cdot 0 & 2 \cdot 3 \\ 1 \cdot 2 & 1 \cdot 1 & 2 \cdot 2 & 2 \cdot 1 \\ 3 \cdot 0 & 3 \cdot 3 & 1 \cdot 0 & 1 \cdot 3 \\ 3 \cdot 2 & 3 \cdot 1 & 1 \cdot 2 & 1 \cdot 1 \end{bmatrix} = \begin{bmatrix} 0 & 3 & 0 & 6 \\ 2 & 1 & 4 & 2 \\ 0 & 9 & 0 & 3 \\ 6 & 3 & 2 & 1 \end{bmatrix} [1321]⊗[0231]= 1⋅01⋅23⋅03⋅21⋅31⋅13⋅33⋅12⋅02⋅21⋅01⋅22⋅32⋅11⋅31⋅1 = 0206319304026231
克罗内克积有很多矩阵乘法没有的性质,具体感兴趣可以自行搜索,百科记录都很全。
via:
-
向量点乘(即内积)和叉乘(即外积、向量积)区别与意义分析-优快云博客
https://blog.youkuaiyun.com/Lu_gl/article/details/122330285 -
带你一次搞懂点积(内积)、叉积(外积)-优快云博客
https://blog.youkuaiyun.com/apr15/article/details/106160407-
向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读-优快云博客
https://blog.youkuaiyun.com/dcrmg/article/details/52416832 -
向量运算与几何应用-优快云博客
https://blog.youkuaiyun.com/pangshaohua/article/details/87915950 -
点乘和叉乘的区别是什么? - 知乎
https://www.zhihu.com/question/21080171 -
向量运算精讲-优快云博客
https://blog.youkuaiyun.com/Warmth_Dream/article/details/108500551 -
向量点乘(内积)和叉乘(外积、向量积)概念及几何意义_两个向量点乘有什么意义-优快云博客
https://blog.youkuaiyun.com/minmindianzi/article/details/84820362
-
-
点积、叉积、内积、外积【汇总对比】-优快云博客
https://blog.youkuaiyun.com/Dust_Evc/article/details/127502272 -
向量的内积与外积 - 知乎
https://zhuanlan.zhihu.com/p/91342476 -
真一文搞懂:内积、外积及其衍生(内积:点积、数量积、标量积;外积:叉积、叉乘、向量积、张量积) - 知乎
https://zhuanlan.zhihu.com/p/685184693- 百度百科:克罗内克积、内积、外积、叉积
- 维基百科:Inner Product, Outer Product, Cross Product, Exterior Product
- 线性代数教材:《Linear Algebra with Applications》(Gilbert Strang)
- 泛函分析教材:《Functional Analysis》(Walter Rudin)
1269

被折叠的 条评论
为什么被折叠?



