在维基百科关于 向量空间 的介绍中,并未提及构成向量空间的「向量」的具体形态,即它未必是我们通常理解的3维或者 n 维的实数空间,只是提及对加法和数乘封闭。
这里引入一个新的向量空间,比如:all 3×3 matrices. 也即矩阵也是一种向量(将 Rn 的概念延伸至 Rn×n ),只不过需要要求矩阵满足加法和数乘(乘法和向量空间没有关系),显然满足,即两个 3×3 的矩阵相加仍然是 3×3 的矩阵,一个 3×3 的矩阵和一个数(scalar)相乘也仍旧是 3×3 的矩阵。此时,我们单独考察 3×3 的向量空间或称作矩阵空间对数乘封闭这一性质,进而可以得到一种升级版的线性组合(linear combination),此时因为轴(axis)的关系,对应的编程实现便不再是np.dot,而应是np.tensordot,关于numpy下的多维数组的轴的讨论,请参阅numpy中多维数组的轴(axis)。
>>> np.random.seed(123)
>>> X = np.random.randint(0, 6, [3, 2, 2])
>>> X
array([[[5, 2],
[4, 2]],
[[1, 3],
[2, 3]],
[[1, 1],
[0, 1]]])
>>> np.tensordot(X, [1, 1, 1], axes=([0], [0]))
array([[7, 6],
[6, 6]])
# 我们可将[1, 1, 1]替换为任一长度为3的数组
# 数学含义即为矩阵空间的线性组合
# 等价于
>>> np.sum(X, axis=0)
array([[7, 6],
[6, 6]])
这里顺便澄清一下维数的定义,
定义:线性空间 V 中线性无关向量所含向量的最大个数称为 V 的维数(dimension)。
我们考察如下的矩阵空间( ∀3×3 , M )的一个子空间(subspace),如所有 3×3 的对角矩阵(diagonal matrices,仍然保持对加法和数乘的封闭),它的维数是多少?
并非3*3==9,而是3,极大线性无关组所含向量的个数嘛,比如如下的一组线性无关组:
再比如对称矩阵的维数为6,上三角矩阵的维数也为6。
为什么我们对两个子空间的并集(union)不感兴趣,比如对称矩阵构成的子空间( S )与上三角矩阵构成的子空间( U ),而它们的交集构成对角矩阵( S∩U=D )。是因为此时 S∪U 构成的子空间不再是线性空间。
此时将 S∪U 约束为 S+U (direct sum,any element of S +(向量加法) any element of U =all 3*3 matrices)
这里又引申出另外一条重要的公式,维数公式:
定理(维数公式):如果 V1,V2 是数域 K 上的线性空间 V 的两个子空间,那么有如下的公式: