几种外积的概念辨析

  最近在学习 PyTorch 的时候,看到文档中计算两个向量的“outer product”后得到一个矩阵。我刚开始理所当然地把“outer product”理解为高中所学的外积,即叉积。但我越想越不对劲:两个向量的叉积不应该还是向量吗,怎么会叉出矩阵来呢?查了一波资料后发现这里的“outer product”不是叉积,而是张量积。
  中文里的外积一词常出现在代数、几何学等领域中。对两向量 A\vec{A}B\vec{B} 而言,外积可指:

  • 叉积(Cross product),又称向量积(Vector product),常写为 A×B\vec{A}\times\vec{B}
  • 楔积(Wedge product 或 Exterior product),常写为 AB\vec{A}\wedge\vec{B}
  • 张量积(Tensor product 或 Outer product),常写为 AB\vec{A}\otimes\vec{B}

  上述三种都可称作外积,但含义却大相径庭,因此极易出现混淆,尤其是“exterior”和“outer”都有外面的意思,我发现网上许多文章甚至一些教科书中都出现了翻译、解释上的错误。我认为避免混淆的最好办法就是使用“叉积”、“向量积”、“楔积”、“张量积”这些没有歧义的词语,而避免使用“外积”一词。
  下面是对几种外积概念的简要辨析。

一、叉积

  两个向量 a\vec{a}b\vec{b} 的叉积仅在三维空间中有定义,写作 a×b\vec{a}\times\vec{b}。在物理学中,叉积有时也被写成 ab\vec{a}\wedge\vec{b},但在数学中 ab\vec{a}\wedge\vec{b} 是外代数中的外积(楔积)。
  叉积可以定义为:

a×b=absinθ n\vec{a}\times\vec{b} = |\vec{a}||\vec{b}|\sin{\theta}\ \vec{n}

其中 sinθ\sin{\theta} 表示 a\vec{a}b\vec{b} 在它们所定义的平面上的夹角(0θ1800^{\circ}\leq\theta\leq180^{\circ})。a|\vec{a}|b|\vec{b}| 是向量 a\vec{a}b\vec{b} 的模长,而 n\vec{n} 则是一个与 a\vec{a}b\vec{b} 所构成的平面垂直的单位向量,方向由右手定则决定。

  叉积可以表达为这样的行列式:

u×v=ijku1u2u3v1v2v3\vec{u}\times\vec{v} = \begin{vmatrix}\vec{i}&\vec{j}&\vec{k}\\u_{1}&u_{2}&u_{3}\\v_{1}&v_{2}&v_{3}\end{vmatrix}

  沿第一行进行拉普拉斯展开可得:

u×v=u2u3v2v3i+u1u3v1v3j+u1u2v1v2k=(u2v3u3v2)i(u1v3u3v1)j+(u1v2u2v1)k\begin{aligned} \vec{u}\times\vec{v} &= \begin{vmatrix}u_{2}&u_{3}\\v_{2}&v_{3}\end{vmatrix}\vec{i} + \begin{vmatrix}u_{1}&u_{3}\\v_{1}&v_{3}\end{vmatrix}\vec{j} + \begin{vmatrix}u_{1}&u_{2}\\v_{1}&v_{2}\end{vmatrix}\vec{k}\\ &= (u_{2}v_{3}-u_{3}v_{2})\vec{i} - (u_{1}v_{3}-u_{3}v_{1})\vec{j} + (u_{1}v_{2}-u_{2}v_{1})\vec{k} \end{aligned}

二、楔积

  不了解,貌似是定义在张量空间上的一种运算。具体细节请移步维基百科外代数(格拉斯曼代数)词条,我反正看不懂。

三、张量积

  在数学中,张量积,记为\otimes,可以应用于不同的上下文中,如向量、矩阵、张量、向量空间、代数、拓扑向量空间和模。在各种情况下这个符号的意义是同样的:最一般的双线性运算。在某些上下文中也叫做外积。
  向量的外积是矩阵的克罗内克积的特殊情况。
  给定m×1m \times 1列向量u\vec{u}1×n1 \times n行向量v\vec{v},它们的外积uv\vec{u} \otimes \vec{v}被定义为m×nm \times n矩阵A\mathbf{A},结果出自

uv=A=u v\vec{u} \otimes \vec{v} = \mathbf{A} = \vec{u}\ \vec{v}

这里的张量积就是向量的乘法。
例子:

ba[b1b2b3b4][a1a2a3]=[a1b1a2b1a3b1a1b2a2b2a3b2a1b3a2b3a3b3a1b4a2b4a3b4]\vec{b} \otimes \vec{a} \rightarrow \begin{bmatrix}b_1 \\ b_2 \\ b_3 \\ b_4\end{bmatrix} \begin{bmatrix}a_1 & a_2 & a_3\end{bmatrix} = \begin{bmatrix}a_1b_1 & a_2b_1 & a_3b_1 \\ a_1b_2 & a_2b_2 & a_3b_2 \\ a_1b_3 & a_2b_3 & a_3b_3 \\ a_1b_4 & a_2b_4 & a_3b_4\end{bmatrix}

  结果的秩为1,结果的维数为 4×3 = 12。这里的秩指的是“张量秩”(所需指标数),而维数计算在结果数组(阵列)中自由度的数目。