跳到正文
格致开物MATHWIKI

矩阵向量化

内容维护:格致开物 · 编写与核验 · 修订记录 · 纠错

矩阵向量化(vectorization of a matrix)按约定的顺序将矩阵元素排成一个列向量。本文采用按列堆叠:若 X∈ℝm×n,依次把第一列、第二列直到第 n 列接在一起,记为 vec⁡(X)∈ℝmn。向量化不改变元素,但改变了索引的组织方式,使对矩阵的线性运算可以写成普通线性方程。[1]

例如 X=(1234),vec⁡(X)=(1324). 若按行堆叠,结果会变成 (1,2,3,4)𝖳。两种约定都能使用,但同一条恒等式中的堆叠方式必须一致。

矩阵第一列的一三先进入向量前两项,第二列的二四进入后两项,每列用不同颜色追踪。
按列向量化保留列内顺序,并把列号变成向量中的块号。

从双索引到单索引

矩阵元素 xij 在向量中的位置为 i+(j−1)m,因为前面的 j−1 列各占 m 个位置。这个公式给出一个双射,所以向量化是从矩阵空间到 ℝmn 的线性同构。逆操作只需按每 m 个元素切成一列;不说明原来的行数,单靠长度不能唯一恢复矩阵形状。

对同形矩阵 X,Y,元素只重排,故 vec⁡(X)𝖳vec⁡(Y)=∑i,jxijyij=tr⁡(X𝖳Y). 特别地 ‖vec⁡(X)‖2=‖X‖F,右边为弗罗贝尼乌斯范数。这说明重排保留元素平方和,而不是说矩阵的谱范数也等于这个向量长度。

两侧乘法的向量化恒等式

设 A∈ℝr×m、X∈ℝm×n、B∈ℝn×s,则 vec⁡(AXB)=(B𝖳⊗A)vec⁡(X), 其中 ⊗ 是克罗内克积。右边矩阵尺寸为 rs×mn,正好将输入的 mn 个元素变为输出的 rs 个元素。

逐项证明可以防止记错转置。左边在对应 (i,j) 的位置为 (AXB)ij=∑k=1m∑ℓ=1naikxkℓbℓj. 右边与输入 xkℓ 相乘的系数,位于克罗内克积的第 (j,ℓ) 块、块内第 (i,k) 项,等于 (B𝖳)jℓaik=bℓjaik。对全部 k,ℓ 求和,便与左边相同。转置来自输出列 j 与输入列 ℓ 的次序,并非装饰符号。

主例再取 A=(1101)、B=(200−1)。先普通相乘得到 AX=(4634),AXB=(8−66−4). 向量化结果为 (8,6,−6,−4)𝖳。另一方面 B𝖳⊗A 是以 2A,−A 为对角块的分块矩阵,将它乘以 (1,3,2,4)𝖳,前一块得到 (8,6),后一块得到 (−6,−4),两条路径一致。

从矩阵方程到线性方程

对方阵 A∈ℝm×m、B∈ℝn×n,矩阵方程 AX+XB=C 可写成 (In⊗A+B𝖳⊗Im)vec⁡(X)=vec⁡(C). 这是分别对 AX 与 XB 使用前一恒等式,再利用向量化的线性性。它把 mn 个未知元素视为一个向量的坐标。

变式取 A=diag⁡(1,2)、B=diag⁡(3,4)、C=(4101524)。按列堆叠后,系数矩阵为 diag⁡(4,5,5,6),右端为 (4,15,10,24)𝖳,所以解向量是 (1,3,2,4)𝖳,恢复为主例的 X。分母中的四、五、五、六分别来自对应行、列的特征值之和;若其中某个和为零,便不能在那一项直接相除。

转置、行优先约定与实现边界

矩阵转置对应一个置换矩阵 Km,n:vec⁡(X𝖳)=Km,nvec⁡(X)。对二阶主例,它交换向量的第二、第三项。若使用按行堆叠,相当于向量化转置,因此两侧乘法公式中的克罗内克因子和次序也随之改变,不能混用列优先公式。

向量化是代数表示,不意味着一定要显式构建大矩阵。原本两个小矩阵乘法可利用结构完成;形成 B𝖳⊗A 可能需要存储大量元素。也不能从“元素顺序确定”推断程序中的重塑必为零复制:底层存储是行优先、列优先还是带步幅的视图,会影响实际内存操作。数学恒等式应先固定顺序,再由实现选择合适的数据布局。

参考文献

  1. ↑ Kaare Brandt Petersen、Michael Syskind Pedersen,The Matrix Cookbook,Vectorization 节。