本人才疏学浅,如有什么错误,望不吝指出。
上一篇:LearnGL - 06 - Matrix - 矩阵01,了解了矩阵就是定义一个坐标空间的轴向
这一篇:这篇再讲一丢丢关于矩阵的乘法内容,这些都是个人看的零散资料总结的内容。
就是 3x3 不能和 4x1 的矩阵相乘。但是3x3 的矩阵可以和 3x1 的矩阵向量。第一次遇到这个限制的同学,在看教科书上可能只会告诉你:矩阵相乘,前者的列数量要等于后者的行数。但是为何要有这个限制能,可能没法弄懂,下面我就讲解一些我个人在阅读了部分资料的总结,来理解为何会有这个限制。
这个也是 变换 中没有 详细 讲到的,因此加以说明。
先了解什么是向量空间?
就是在某个空间中,某个向量可以 变换 到所有的任意尺度、位置的 空间集合。(我看有些术语叫:张成空间)
一个 一维 向量(就是一个标量),它能 张成 到的空间就是一条线的空间(包含了一个坐标轴上的 − ∞ ∼ + ∞ -\infty\sim+\infty −∞∼+∞的所有数值)。
一个 二维 向量,它能 张成 到的空间就是一个平面。
一个 三维 向量,它能 张成 到我们的三维的整个空间。(你可以理解为一个无限大的立方体或是圆体)
当然这些都是低维度可视化的理解。
在一些高维度(三维以上),我们就画不出来了。
这些维度可以有 n n n个维度。
什么叫向量空间维度?
或是什么叫矩阵变换空间的维度?
这么说 向量空间 == 矩阵变换空间?,他们是 不等于 的。
只不过,一个 矩阵其实代表 的是某个维度的向量空间的 变换。
这里的变换并不是矩阵对向量空间的变换,而是在这个向量空间下,这个矩阵对在这个向量空间下的某个向量进行变换。
这个矩阵代表的向量空间有多少维度,就说明这个向量空间有多少个维度。
因此我们以矩阵来说明维度。
例如:一个 4x4 矩阵左乘于一个 4x1 的矩阵(或是向量): 4 × 4 ⋅ 4 × 1 4\times 4\cdot 4\times 1 4×4⋅4×1
其中 4x4, 4x1 代表的就是这个矩阵的尺寸(这里不用 维度,便于与空间维度 区分)。
然后我们总看到多数的矩阵教学、教程中都有描述,矩阵相乘,必须要,左边的矩阵的列的数量,与 右边的矩阵的行的数量 的维度相同。
如 A m × n ⋅ B n × k A_{m \times \color{#ff0000}n} \cdot B_{{\color{#ff0000}n} \times k} Am×n⋅Bn×k中,必须要 n n n 要相同才可以相乘。
从之前的 LearnGL - 06 - Matrix - 矩阵01 讲解中,可以知道矩阵中的 每一列 就是一个 代表一个空间,或是 代表一个坐标系 中的 正交基向量,或是 坐标轴单位向量。
矩阵 有多少个列,代表有多少个正交基向量(坐标轴),就 代表 了这个 向量空间 有多少维度 组成的。
那么我们可以这么理解:
M = [ ∣ ∣ ∣ X → Y → Z → ∣ ∣ ∣ ] M=\begin{bmatrix} | & | & | \\ \overrightarrow X & \overrightarrow Y & \overrightarrow Z \\ | & | & | \end{bmatrix} M=⎣⎡∣X∣∣Y∣∣Z∣⎦⎤
上面的矩阵 M M M有三个轴,分别是 X → , Y → , Z → \overrightarrow X, \overrightarrow Y, \overrightarrow Z X,Y,Z,所以他的 向量空间 维度是 三维 的。
这也只是以三维空间(有三个轴)来举例,在除了3D 图形学之外,部分领域会使用到不确定的维度数量的 向量空间 下做运算的,如:
M = [ ∣ ∣ ∣ ∣ V → 1 V → 2 ⋯ V → n ∣ ∣ ∣ ∣ ] M=\begin{bmatrix} | & | & | & |\\ \overrightarrow V_1 & \overrightarrow V_2 & \cdots & \overrightarrow V_n \\ | & | & | & | \end{bmatrix} M=⎣⎡∣V1∣∣V2∣∣⋯∣∣Vn∣⎦⎤
可以在 n n n个维度 下的 向量空间 下来做 线性变换。
所以 向量空间的维度 是可以根据你的 矩阵的列的数量来决定的。
那么还是回到主题,为何:矩阵相乘,必须要:左边的矩阵的列的数量,与 右边的矩阵的行的数量 的维度相同?
前面说了,矩阵 m x n,说明有 n 个维度。
以3D图形中常用的4x4 矩阵 不能和 3x1矩阵(向量)为例,因为 前者的列数量 不等于 后者的行数。
那么你可以这么理解:后面的 3x1矩阵(向量)的行数量,也可以代表向量空间的维度。
但这也是有规定条件下才能这么理解的。
如有两矩阵乘法: A m × n ⋅ B n × k A_{m \times \color{#ff0000}n} \cdot B_{{\color{#ff0000}n} \times k} Am×n⋅Bn×k
A所在向量空间的维度是 n n n,B所在的向量空间的维度同样是 n n n,所以这两个矩阵可以相乘。
也就说,矩阵变换的所在的维度的数量,必须是同样的维度数量,才可以相乘。
但前面不是说用矩阵的列的数量来决定它的向量空间的维度的数量吗?
为何B矩阵是用矩阵的行的数量来决定的呢?
这里可以总结为:在矩阵相乘中,放在前面(或是在左边)的矩阵的列可以决定它所在的维度,而放在后面(或是在右边)的矩阵的行可以决定它所在的维度。
再举个例子你就明白了。
我们有一个坐标点,或是一个向量:3x1: ( x y z ) \left( \begin{matrix} x\\y\\z \end{matrix} \right) ⎝⎛xyz⎠⎞
一般我们认为它是在三维的,因为它有表示X,Y,Z三个轴向上的偏移量。
但更准确的理解是:因为它一般被矩阵变换时,都是矩阵左乘(放在向量的左边)来计算的,所以这时候,矩阵的列是维度,这个向量的行也是维度。
所以能和这个向量相乘的矩阵的维度必须是: n × 3 n\times 3 n×3的一个尺寸的矩阵。
如果向量,或是这个顶点,我们扩展到齐次坐标:4x1: ( x y z 1 ) \left( \begin{matrix} x\\y\\z\\1 \end{matrix} \right) ⎝⎜⎜⎛xyz1⎠⎟⎟⎞,那么能和这个向量相乘的矩阵的维度就必须是: n × 4 n\times 4 n×4,所以我们3D图形学中,比较常见的有:3x3不带位移的矩阵,与4x4带有位移的矩阵。