前言
矩阵的相关操作在机器学习中很重要,为了给之后打下坚实的基础,在此对矩阵的基础知识进行总结学习。主要包括矩阵的四则运算(加减乘除)以及矩阵的转置与逆矩阵。
什么是矩阵
在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合 ,最早来自于方程组的系数及常数所构成的方阵。这一概念由19世纪英国数学家凯利首先提出。直观解释就是由中括号包起来的一组二维数据,如下所示即就是一个2*2的矩阵。
A = [ 1 2 3 4 ] A = \left[\begin{array}{ll} 1 & 2 \\ 3 & 4 \end{array}\right] A=[1324]
常见的表示方法
一般情况下,由大写字母(如:A、B)表示一个矩阵,此处用A来表示上述矩阵。则:
A i j 即 表 示 矩 阵 中 的 元 素 , 其 中 i 表 示 第 i 行 , j 表 示 第 j 列 。 A_{i j}即表示矩阵中的元素,其中i表示第i行,j表示第j列。 Aij即表示矩阵中的元素,其中i表示第i行,j表示第j列。
A 11 A_{1 1} A11即表示A矩阵中第1行第1列的元素,即就是1; A 22 A_{2 2} A22即表示A矩阵中第2行第2列的元素,即就是4; A 32 A_{3 2} A32即表示A矩阵中第3行第2列的元素,结果发现是未定义的,因为A矩阵中不存在第3行,因此该结果是未定义的。所以在使用矩阵过程中,一定要避免出现未定义的情况。
向量:向量是一种特殊的矩阵,因为它只有1列。可表示为 n ∗ 1 n*1 n∗1的矩阵。以下就是一个4*1的矩阵,也可称为4维向量。
B = [ 5 6 7 8 ] B = \left[\begin{array}{l} 5 \\ 6 \\ 7 \\ 8 \end{array}\right] B=⎣⎢⎢⎡5678⎦⎥⎥⎤
说明:一般情况下,矩阵的下标都从1开始。除非特定情况或已经说明,矩阵的下标从0开始。
矩阵的加法/减法
矩阵和矩阵相加,首先要求两个矩阵必须是同一维度的。只有同维度的两个矩阵才能进行加法操作。比如矩阵A为32维,矩阵B为32维,此时两个矩阵可以相加;若B矩阵为2*3维,则两个矩阵不能相加。
方法:对应元素依次相加, A 11 + B 11 , A 12 + B 12 . . . . . . A_{1 1} + B_{1 1},A_{1 2} + B_{1 2}...... A11+B11,A12+B12......。
A = [ 3 2 0 5 7 9 ] , B = [ 6 11 2 7 4 5 ] A = \left[\begin{array}{lll} 3 & 2 & 0 \\ 5 & 7 & 9 \end{array}\right], B = \left[\begin{array}{lll} 6 & 11 & 2 \\ 7 & 4 & 5 \end{array}\right] A=[352709],B=[6711425]
令矩阵 C = A + B C = A + B C=A+B,那么 C C C为:
C = [ 3 + 6 2 + 11 0 + 2 5 + 7 7 + 4 9 + 5 ] = [ 9 13 2 12 11 14 ] C = \left[\begin{array}{lll} 3+6 & 2+11 & 0+2 \\ 5+7 & 7+4 & 9+5 \end{array}\right] =\left[\begin{array}{lll} 9 & 13 & 2 \\ 12 & 11 & 14 \end{array}\right] C=[3+65+72+117+40+29+5]=[9121311214]
矩阵的减法和加法一样,此处就不再赘述了。
矩阵和标量的乘法/除法
矩阵和标量相乘,即就是一个矩阵和数字相乘,可表示为 k ∗ A k*A k∗A或 A ∗ k A*k A∗k,其中 k k k为常数。这个很简单,就是用 k k k和矩阵中的所有元素相乘即可。
A = 3 ∗ [ 1 2 3 4 ] = [ 1 2 3 4 ] ∗ 3 = [ 1 ∗ 3 2 ∗ 3 3 ∗ 3 4 ∗ 3 ] = [ 3 6 9 12 ] A = 3 * \left[\begin{array}{ll} 1 & 2 \\ 3 & 4 \end{array}\right] =\left[\begin{array}{ll} 1 & 2 \\ 3 & 4 \end{array}\right] * 3 =\left[\begin{array}{ll} 1*3 & 2*3 \\ 3*3 & 4*3 \end{array}\right] =\left[\begin{array}{ll} 3 & 6 \\ 9 & 12 \end{array}\right] A=3∗[1324]=[1324]∗3=[1∗33∗32∗34∗3]=[39612]
矩阵和标量的除法其实一样,即就是乘以这个标量的倒数。例如 / 3 , 就 就 是 ∗ 1 / 3 /3,就就是*1/3 /3,就就是∗1/3。
矩阵和矩阵的乘法
两个矩阵相乘,必须满足以下规律:
第一个矩阵的列数 = 第二个矩阵的行数。
A
=
[
m
∗
n
]
∗
[
n
∗
k
]
=
[
m
∗
k
]
A = \left[\begin{array}{lll} & & \\ & m*n & \\ & & \end{array}\right]* \left[\begin{array}{lll} & & \\ & n*k & \\ & & \end{array}\right]= \left[\begin{array}{lll} & & \\ & m*k & \\ & & \end{array}\right]
A=⎣⎡m∗n⎦⎤∗⎣⎡n∗k⎦⎤=⎣⎡m∗k⎦⎤
其中第一个表示m行n列矩阵,第二个表示n行k列矩阵,则矩阵相乘得到m行k列矩阵。
方法说明:如下假设A为23维矩阵,B为33维矩阵,则我们可以知道,相乘以后的矩阵为23维,即C为23维矩阵。
A = [ 3 2 0 5 7 9 ] , B = [ 1 2 0 4 5 5 2 8 1 ] A = \left[\begin{array}{lll} 3 & 2 & 0 \\ 5 & 7 & 9 \end{array}\right], B = \left[\begin{array}{lll} 1 & 2 & 0 \\ 4 & 5 & 5 \\ 2 & 8 & 1 \end{array}\right] A=[352709],B=⎣⎡142258051⎦⎤
C = A ∗ B = [ 3 2 0 5 7 9 ] ∗ [ 1 2 0 4 5 5 2 8 1 ] C = A * B = \left[\begin{array}{lll} 3 & 2 & 0 \\ 5 & 7 & 9 \end{array}\right]* \left[\begin{array}{lll} 1 & 2 & 0 \\ 4 & 5 & 5 \\ 2 & 8 & 1 \end{array}\right] C=A∗B=[352709]∗⎣⎡142258051⎦⎤
分解步骤:
(1)首先将 B B B矩阵分解为3个3维向量,分别为 B 1 , B 2 , B 3 B1,B2,B3 B1,B2,B3,则:
B 1 = [ 1 4 2 ] B 2 = [ 2 5 8 ] B 3 = [ 0 5 1 ] B1= \left[\begin{array}{l} 1 \\ 4 \\ 2 \end{array}\right] B2 = \left[\begin{array}{l} 2 \\ 5 \\ 8 \end{array}\right] B3 = \left[\begin{array}{l} 0 \\ 5 \\ 1 \end{array}\right] B1=⎣⎡142⎦⎤B2=⎣⎡258⎦⎤B3=⎣⎡051⎦⎤
(2)分别将A与 B 1 , B 2 , B 3 B1,B2,B3 B1,B2,B3相乘,注意顺序不能反:
A ∗ B 1 = [ 3 2 0 5 7 9 ] ∗ [ 1 4 2 ] = [ 3 ∗ 1 + 2 ∗ 4 + 0 ∗ 2 5 ∗ 1 + 7 ∗ 4 + 9 ∗ 2 ] = [ 11 51 ] A*B1 = \left[\begin{array}{lll} 3 & 2 & 0 \\ 5 & 7 & 9 \end{array}\right]* \left[\begin{array}{l} 1 \\ 4 \\ 2 \end{array}\right]= \left[\begin{array}{lll} 3*1+2*4+0*2 \\ 5*1+7*4+9*2 \\ \end{array}\right]= \left[\begin{array}{l} 11 \\ 51 \\ \end{array}\right] A∗B1=[352709]∗⎣⎡142⎦⎤=[3∗1+2∗4+0∗25∗1+7∗4+9∗2]=[1151]
A ∗ B 2 = [ 3 2 0 5 7 9 ] ∗ [ 2 5 8 ] = [ 3 ∗ 2 + 2 ∗ 5 + 0 ∗ 8 5 ∗ 2 + 7 ∗ 5 + 9 ∗ 8 ] = [ 16 117 ] A*B2 = \left[\begin{array}{lll} 3 & 2 & 0 \\ 5 & 7 & 9 \end{array}\right]* \left[\begin{array}{l} 2 \\ 5 \\ 8 \end{array}\right]= \left[\begin{array}{lll} 3*2+2*5+0*8 \\ 5*2+7*5+9*8 \\ \end{array}\right]= \left[\begin{array}{l} 16 \\ 117 \\ \end{array}\right] A∗B2=[352709]∗⎣⎡258⎦⎤=[3∗2+2∗5+0∗85∗2+7∗5+9∗8]=[16117]
A ∗ B 3 = [ 3 2 0 5 7 9 ] ∗ [ 0 5 1 ] = [ 3 ∗ 0 + 2 ∗ 5 + 0 ∗ 1 5 ∗ 0 + 7 ∗ 5 + 9 ∗ 1 ] = [ 10 44 ] A*B3 = \left[\begin{array}{lll} 3 & 2 & 0 \\ 5 & 7 & 9 \end{array}\right]* \left[\begin{array}{l} 0 \\ 5 \\ 1 \end{array}\right]= \left[\begin{array}{lll} 3*0+2*5+0*1 \\ 5*0+7*5+9*1 \\ \end{array}\right]= \left[\begin{array}{l} 10 \\ 44 \\ \end{array}\right] A∗B3=[352709]∗⎣⎡051⎦⎤=[3∗0+2∗5+0∗15∗0+7∗5+9∗1]=[1044]
(3)将3个矩阵合并,分别为矩阵的第一列,第二列,第三列。
C = [ 11 16 10 51 117 44 ] C = \left[\begin{array}{lll} 11 & 16 & 10\\ 51 & 117 & 44 \end{array}\right] C=[1151161171044]
说明:由上边的例子可以看出来,矩阵C的第1行第1列元素就是矩阵A中第1行所有元素与矩阵B中第1列所有元素一一对应相乘,然后相加。其余同理。
矩阵乘法的特性
(1)矩阵乘法不满足交换律,即
A
∗
B
≠
B
∗
A
A*B≠B*A
A∗B=B∗A,在绝大多数情况下都不可以。
假设 A A A为32维矩阵, B B B维23维矩阵,那么 A ∗ B A*B A∗B为33维矩阵; B ∗ A B*A B∗A为22维矩阵。明显这两个的结果是不同的。
(2)矩阵乘法满足结合律,即 A ∗ B ∗ C = ( A ∗ B ) ∗ C = A ∗ ( B ∗ C ) A*B*C = (A*B)*C = A*(B*C) A∗B∗C=(A∗B)∗C=A∗(B∗C)。
单位矩阵
单位矩阵肯定是一个方阵,即行数和列数一样,是一个 n ∗ n n*n n∗n维的矩阵(n>=2)。单位矩阵常用 I I I表示。
单位矩阵的特性:AI = IA = A (假设 A A A为32维矩阵,则第一个 I I I默认为22维,第二个 I I I默认为3*3维)。
表示形式(只有对角线位置为1,其余元素均为0):
I = [ 1 0 0 0 1 0 0 0 1 ] , I = [ 1 0 0 1 ] I = \left[\begin{array}{lll} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right], I = \left[\begin{array}{ll} 1 & 0 \\ 0 & 1 \end{array}\right] I=⎣⎡100010001⎦⎤,I=[1001]
逆矩阵
一个矩阵的逆矩阵乘以该矩阵,结果为单位矩阵。表示为 A − 1 A^{-1} A−1,关系为:
A ⋅ A − 1 = A − 1 ⋅ A = I A \cdot A^{-1}=A^{-1} \cdot A=I A⋅A−1=A−1⋅A=I
假设矩阵: A = [ 1 3 2 4 ] A = \left[\begin{array}{ll} 1 & 3\\ 2 & 4 \end{array}\right] A=[1234]
则A的逆矩阵为:
A − 1 = [ − 2 1.5 1 − 0.5 ] A^{-1} = \left[\begin{array}{ll} -2 & 1.5\\ 1 & -0.5 \end{array}\right] A−1=[−211.5−0.5]
大家可以计算一下它们的乘积,看是不是为单位矩阵,此处就不再计算。逆矩阵的计算方法在Octave或Matlab中可以使用 p i n v ( ) pinv() pinv()函数来进行计算。
转置矩阵
转置矩阵即就是将矩阵的第n行变成按顺序第n列。
假设矩阵A的转置矩阵为B,则满足关系: B i j = A j i B_{i j} = A_{j i} Bij=Aji。
假设矩阵: A = [ 1 3 2 4 ] A = \left[\begin{array}{ll} 1 & 3\\ 2 & 4 \end{array}\right] A=[1234]
则转置矩阵: B = [ 1 2 3 4 ] B = \left[\begin{array}{ll} 1 & 2\\ 3 & 4 \end{array}\right] B=[1324]
可以看出,A的第一行变成了B的第一列,A的第二行变成了B的第二列。且满足 B i j = A j i B_{i j} = A_{j i} Bij=Aji。
A 11 = 1 , B 11 = 1 A_{1 1} = 1 ,B_{1 1} = 1 A11=1,B11=1
A 21 = 2 , B 12 = 2 A_{2 1} = 2,B_{1 2} = 2 A21=2,B12=2