在维基百科上,外积(Outer product - Wikipedia)被解释为:
In linear algebra, an outer product is the tensor product of two coordinate vectors, a special case of the Kronecker product of matrices.
虽然这个解释很简明,但当我们看完这段话后,可能会产生以下两点疑问:
围绕这两点疑问,我们来讨论一下容易混淆的外积、Kronecker积和张量积。
在之前的浅谈张量分解(二):张量分解的数学基础一文中,我们已经知道了Kronecker积的运算规则,给定一个大小为的矩阵和一个大小为的矩阵,则矩阵和矩阵的Kronecker积为
很明显,矩阵的大小为,即行数为,列数为,符号“”表示Kronecker积。当给定两个向量,如,时,我们可以很轻松地计算出Kronecker积为。
import numpy as np
a = np.array([[1], [2]])
b = np.array([[3], [4]])
np.kron(a, b)
np.outer(a, b)
np.kron(a, b.T)
然而,向量的外积却为,是一个大小为的矩阵。我们发现Kronecker积与外积并不相同。Kronecker product and outer product confusion认为这种不一致是由符号的“滥用”造成的。
不妨将Kronecker积的符号记作,外积的符号记作(注:一般用符号 表示),则有
.
虽然严格意义上的Kronecker积的计算结果和外积的不同,但这种不同仅仅体现在每个元素的摆放位置不同,而且等价于,确实可以用来计算外积。若给定向量 , 和 ,则它们外积为
.
因此,我们依然可以认为外积是Kronecker积的特例。
简单来说,张量积的定义为:给定两个有限维的向量空间(finite dimensional vector space)和,其中,为向量空间的基(basis),为向量空间的基,则我们可以将定义为个的线性组合,即
.
同时,双线性映射(bilinear map,如果仅仅关注张量积的计算,则不必深究这个概念)被定义为
其中,,对于任意取自向量空间和下的向量,我们都可以用相应的基进行线性组合来表示出来,若为向量线性组合的系数,为向量线性组合的系数,则满足。另外,表示两个向量空间的Cartesian积(维基链接:Cartesian product)。
为了便于理解,这里举一个简单的例子(来源:Calculate the tensor product of two vectors)。
已知下的一组标准基为,,下的一组标准基为,,。给定向量,向量,则向量的张量积为
其中,是的基,张量积与外积的计算结果完全相同。
import numpy as np
x = np.array([[1], [1]])
y = np.array([[1], [-2], [1]])
np.kron(x, y.T)
np.outer(x, y)
对于任意向量,,它们的张量积有时被称为外积,如果是的基,且, 是标准基,则外积可以写成如下形式:
其中,是矩阵第行、第列的元素。
对于向量而言,张量积和外积是等价的。
在矩阵分解和张量分解中,我们总不免见到rank one这个词,另外,我们也知道“秩一”与向量的外积密切相关,因此,对秩一矩阵和外积的联系感兴趣的读者可阅读Rank of a Decomposable Tensor和Is there meaning for uv^T?上的回答。
附录——张量积的性质:
(1) , ;
(2) .