在维基百科上,外积(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积的特例呢?
- 外积与张量积(tensor product)有什么关系?
围绕这两点疑问,我们来讨论一下容易混淆的外积、Kronecker积和张量积。
1 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积的特例。
2 张量积
简单来说,张量积的定义为:给定两个有限维的向量空间(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)
对于任意向量,
,它们的张量积
有时被称为外积,如果
是
的基,且
,
是标准基,则外积可以写成如下形式:
其中,是矩阵
第
行、第
列的元素。
对于向量而言,张量积和外积是等价的。
3 推荐阅读:秩一(rank one)矩阵和外积的联系
在矩阵分解和张量分解中,我们总不免见到rank one这个词,另外,我们也知道“秩一”与向量的外积密切相关,因此,对秩一矩阵和外积的联系感兴趣的读者可阅读Rank of a Decomposable Tensor和Is there meaning for uv^T?上的回答。
附录——张量积的性质:
(1) ,
;
(2) .