矩阵计算
矩阵计算本质是来源于线性代数的定义,其计算方式是通过行与列的逐项匹配、相乘并求和来生成一个新的矩阵,同时矩阵A的每一行代表一个观测点或者样本,每一列代表每个观测点或样本的不同特征。
矩阵的计算是基于矩阵的形状(维度)进行的,比如矩阵A为m行n列,矩阵B为p行q列,那么只要n = p,则满足矩阵计算的规则,所以矩阵的计算必须要满足被乘矩阵A的列数 = 乘数矩阵B的行数才能进行矩阵计算,同时输出的矩阵的形状也是为m行*q列,即行数来自于左侧矩阵A的行,列数来自于右侧矩阵B的列数。
举例,如下两个矩阵,矩阵A为顾客购买水果的数据,对应一个2*2的矩阵:
购买苹果数量 | 购买香蕉数量 | |
---|---|---|
顾客1 | 1 | 3 |
顾客2 | 2 | 1 |
矩阵B为水果的单价,对应为一个2*1的列向量:
单价 | |
---|---|
苹果 | 2 |
香蕉 | 3 |
上述的两个矩阵满组矩阵计算的需求,即A的列数 = B的行数,然后结果为[2,1]的矩阵。
矩阵计算,矩阵乘法的规则是行乘列并逐项求和: $$ \begin{bmatrix} 1 & 3 \newline 2 & 1 \end{bmatrix} \cdot \begin{bmatrix} 2 \newline 3 \end{bmatrix} $$
$$ \begin{bmatrix} 1 \cdot 2 + 3 \cdot 3 \newline 2 \cdot 2 + 1 \cdot 3 \end{bmatrix} $$
$$ \begin{bmatrix} 11 \newline 7 \end{bmatrix} $$
上面采用矩阵乘法的方式同样可以使用普通的手动计算:
$$ 顾客1购买金额 = 1 * 2 + 3 * 3 = 11 \newline 顾客2购买金额 = 2 * 2 + 1 * 3 = 7 $$
优势
矩阵计算还是手动计算,本质上都是执行相同的数学运算,如果只是手动计算,那么矩阵计算有两个优点:
- 描述性强:即用矩阵很简单的可以描述需要做的运算,手动计算每行都需要带入公式,计算量太大了后就非常麻烦。
- 扩展性强:如果要添加数据,只需要再添加一行即可,如果要添加特征只需要添加一列即可。
如果是计算机计算,则矩阵计算除了上述的两个优点,还有一个非常大的优势是利用CPU或GPU并行计算,矩阵计算是一个高度依赖于底层库的计算,很多科学工具的底层库通过对矩阵计算进行优化,从而能达到将矩阵计算利用CPU或GPU进行快速的并行计算。
这是因为行与列的匹配是天然的并行任何,这是因为每一行的计算是可以完全独立计算的,比如上面的例子来说,可以拆分为两个不同的并行计算任务: $$ Task1: 1 \cdot 2 + 3 \cdot 3 \newline Task2: 2 \cdot 2 + 1 \cdot 3 $$
矩阵逆
在矩阵计算中,并没有除法的概念,所以就用矩阵逆的方式来代替除法,矩阵逆的核心公式记为如下,其中第一个数学符号为A矩阵,第二个数学符号A矩阵逆,第三个数学符号为单位矩阵: $$ A \cdot A^{-1} = I $$
单位矩阵是一个特殊矩阵,内部是一个对角线是1,其余位置为0的一个特殊矩阵,比如下面2X2的单位矩阵: $$ \begin{bmatrix} 1 & 0 \newline 0 & 1 \end{bmatrix} $$ 再比如下面3X3的单位矩阵表示为: $$ \begin{bmatrix} 1 & 0 & 0 \newline 0 & 1 & 0 \newline 0 & 0 & 1 \end{bmatrix} $$ 单位矩阵类似于数字中的1,在矩阵运算中是一个“中性元素”,所以矩阵乘以单位矩阵是不会改变矩阵本身的: $$ 1 \cdot x = x \newline 类似于矩阵中的 \newline A \cdot I = A $$ 而矩阵逆则类似于数字中的倒数,类似如下: $$ 2 \cdot \frac{1}{2} = 1 \newline 类似于矩阵中的 \newline A * A^{-1} = I $$ 那么矩阵逆有什么作用?矩阵逆可以用来解方程,比如矩阵计算,如果矩阵A和B已知 $$ X * A = B $$ 那么解矩阵X则等式为: $$ X = B * A逆 $$ 这里的是用B * A逆,是因为矩阵没有除法,所以A逆相当于数字倒数,利用乘法达到除法的效果,将上面的换成普通的数据方程: $$ x * a = b \newline x = b / a $$ 计算矩阵逆,需要多个步骤,其计算的公式为: $$ A^{-1} = \frac{1}{det(A)} \begin{bmatrix} d & -b \newline -c & a \end{bmatrix} $$ 其中 $A^{-1}$ 为矩阵逆,$det(A)$为行列式($det(A)\neq0$),后面的矩阵则代表的是矩阵A交换和取负后的矩阵。
比如矩阵A为如下,然后来举例如何计算:
$$ A = \begin{bmatrix} 2 & 1 \newline 3 & 4 \end{bmatrix} $$ 其内部顺序为:
$$ A = \begin{bmatrix} a & b \newline c & d \end{bmatrix} $$
计算行列式
计算行列式det需要注意其结果不能为0,计算公式表达为:
$$ det(A) = ad - bc $$
按照上面的例子计算:
$$ det(A)=2 \cdot 4 - 1 \cdot 3 $$
交换和取负
把原矩阵的a,d互换位置,然后将b,c取负,即得到:
$$ \begin{bmatrix} 4 & -1 \newline -3 & 2 \end{bmatrix} $$
除以行列式
集合上面的计算结果,然后计算矩阵逆,因为矩阵中没有除法,所以每个矩阵元素都乘以:
$$ A^{-1} = \frac{1}{5} \begin{bmatrix} 4 & -1 \newline -3 & 2 \end{bmatrix} $$ 上面进一步计算等于:
$$ \begin{bmatrix} \frac{4}{5} & -\frac{1}{5} \newline -\frac{3}{5} & \frac{2}{5} \end{bmatrix} $$
结果为:
$$ A^{-1} = \begin{bmatrix} 0.8 & -0.2 \newline -0.6 & 0.4 \end{bmatrix} $$
结果检验
因为在最早提到了矩阵的逆计算是符合如下公式的:
$$ A \cdot A^{-1} = I $$
而其中的I为单位矩阵的一种特殊矩阵,其形式表现为对角线全为1,其余全部为0,所以可以通过计算矩阵乘以矩阵逆来检验结果:
$$ \begin{bmatrix} 2 & 1 \newline 3 & 4 \end{bmatrix} \cdot \begin{bmatrix} 0.8 & -0.2 \newline -0.6 & 0.4 \end{bmatrix} $$
$$ \begin{bmatrix} 1 & 0 \newline 0 & 1 \end{bmatrix} $$
(完)