第3章 矩阵基本运算

3.1矩阵加法

矩阵加法和乘法是矩阵运算中最常用的操作之一,两个矩阵相加,需要它们的形状相同,进行对应元素的相加,如:C=A+B,其中C_{i,j}=A_{i,j}+B_{i,j}。矩阵也可以和向量相加,只要它们的列数相同,相加的结果是矩阵每行与向量相加,这种隐式地复制向量b到很多位置的方式称为广播(broadcasting),以下我们通过一个代码实例来说明。

打印结果为:
[[11 22 33]
[14 25 36]]

3.2矩阵点积

两个矩阵相加,要求它们的形状相同,
如果两个矩阵相乘,如A和B相乘,结果为矩阵C,矩阵A和B需要什么条件呢?条件比较简单,只要矩阵A的列数和矩阵B的行数相同即可。如果矩阵A的形状为m×n,矩阵B的形状为n×p,那么矩阵C的形状就是m×p,例如:
C=AB,则它们的具体乘法操作定义为:
C_{i,j}=\sum_k A_{i,k} B_{k,j} \tag{2.11}
即矩阵C的第i,j个元素C_{i,j}为矩阵的A第i行与矩阵B的第j列的点积。
矩阵乘积有很多重要性质,如满足分配律A(B+C)=AB+AC 和结合律,A(BC)=(AB)C。大家思考一下是否满足交换律?
一般情况,交换律不成立,即AB\neq BA
两个矩阵可以相乘,矩阵也可和向量相乘,只要矩阵的列数等于向量的行数或元素个数。如:
WX=b \tag{2.12}
其中W\in R^{m\times n},b\in R^m ,X\in R^n

3.3转置(transpose)

转置以主对角线(左上到右下)为轴进行镜像操作,通俗一点来说就是行列互换。将矩阵A转置表示为A^T,定义如下:
\left(A^T\right)_{i,j}=A_{j,i}\tag{2.13}
例3:
A=\left[\begin{matrix}a_{1,1} & a_{1,2} &a_{1,3} \cr a_{2,1} & a_{2,2} &a_{2,3}\end{matrix}\right]
A^T=\left[\begin{matrix}a_{1,1} & a_{2,1} \\ a_{1,2} & a_{2,2}\cr a_{1,3} & a_{2,3} \end{matrix}\right]
向量可以看作只有一列的矩阵,把向量x进行转置,得到下式。
x^T=[x_1,x_2,\cdots,x_n]
另外,相乘矩阵的转置也有很好性质,如:\left(AB\right)^T=B^T A^T,满足穿脱原则,如A、B像两件衣服,A先穿、B后穿,脱时反过来,B^T在前,A^T在后。
用NumPy如何实现张量的转置?很简单,利用张量的T属性即可,示例如下:

打印结果如下:
[[1 2 3]
[4 5 6]]
[[1 4]
[2 5]
[3 6]]

3.4矩阵的阿达马积

与向量的阿达马积相同,两个矩阵(如A、B)的阿达马积也是对应元素相乘,记为:A\odot B
例4:
\begin{aligned}A\odot B &=\left[\begin{matrix}1 & 2 & 3 \\ 4 & 5 &6\end{matrix}\right]\left[\begin{matrix}1 & 2 & 4 \\ 3 & 5 &0\end{matrix}\right]\\&=\left[\begin{matrix}1\times 1 & 2\times 2 & 3\times 4 \\ 4\times 3 &5\times 5 & 6\times 0\end{matrix}\right]\\&=\left[\begin{matrix}1 & 4 & 12 \\ 12 & 25 &0\end{matrix}\right]\end{aligned}
两个矩阵对应元素的运算除相乘外,还有A+B、A-B、A/B等。
例5:用Python实现矩阵的阿达马积

运行结果如下:
[[ 1 4 12]
[12 25 0]]
例6:点积、对应元素运算在神经网络中的应用
神经网络的结构如下:

运行结果
[0.35434369 0.64565631]

3.5行列式

一个n\times n的方阵A的行列式记为det(A)或者|A|,一个2×2矩阵的行列式可表示如下:
\left|\begin{matrix}a & b \\ c & d\end{matrix}\right|=ad-bc
把一个n阶行列式中的元素a_{ij}所在的第i行和第j列划去后,留下来的n-1阶行列式叫做元素a_{ij}的余子式,
记作M_{ij}。记A_{ij}=\left(-1\right)^{i+j} M_{ij},叫做元素a_{ij}的代数余子式。一个n\times n矩阵的行列式等于其任意行(或列)的元素与对应的代数余子式乘积之和,即
行列式的性质:
n阶矩阵的转置矩阵A^T的行列式等于A的行列式,即:|A^T|=|A|
方程组或矩阵或行列式的初等行变换:
(1)将行列式的两行交换;
(2)将行列式的某一行乘以k倍之后加到另一行。
第一种变换将使行列式的值反号,第2种变换行列式的值不变。

3.6迹运算

迹运算返回的是矩阵对角元素的和:
Tr(A)=\sum_i A_{i,i}
迹运算在某些场合非常有用。若不使用求和符号,有些矩阵运算很难描述,而通过矩阵乘法和迹运算符号可以清楚地表示。例如,迹运算提供了另一种描述矩阵Frobenius 范数的方式:
||A||_F=\sqrt{Tr(AA^T)}
对迹运算的表达式,我们可以使用很多等式来表示。例如,迹运算在转置运算下是不变的:
Tr(A)=Tr(A^T)
多个矩阵相乘得到的方阵的迹,和将这些矩阵中的最后一个挪到最前面之后相乘的迹是相同的。当然,我们需要考虑挪动之后矩阵乘积依然有定义:
Tr(ABC)=Tr(CAB)=Tr(BCA)
利用Python的NumPy对矩阵求迹同样方便。请看以下示例。

打印结果:
15
15
171
171