赞
踩
继续接着上一篇《人工智能-线性代数之向量篇》的内容来学习汇总下一篇,在这一篇中,我们开始汇总学习人工智能中线性代数最最最重要的一部分,那就是矩阵的运算,几乎所有人工智能机器学习的算法都离不开矩阵的运算,换句话说,就是所有的人工智能都是基于大量的数据在矩阵中进行各种庞杂而基础的运算和变换,从而找出其中的规律,最后训练出数学模型的。
在数学中,矩阵是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。例如:
A
=
[
−
1
3
2
4
]
A=[−1324]
A
=
[
2
−
1
2
0
]
,
B
=
[
2
2
3
5
]
A=[2−120]
A
+
B
=
[
2
+
2
(
−
1
)
+
2
2
+
3
0
+
5
]
=
[
4
1
5
5
]
A+B=[2+2(−1)+22+30+5]
符合加法交换律:
A
+
B
=
B
+
A
A+B=B+A
A+B=B+A
A
=
[
2
−
1
2
0
]
,
λ
∈
R
,
A
λ
=
[
2
λ
−
1
λ
2
λ
0
λ
]
A=[2−120]
矩阵A和矩阵B相乘,必须满足A的列数等于B的行数,否则无法相乘。规律: A m × n B p × q = C m × q A_{m\times n}B_{p\times q}=C_{m\times q} Am×nBp×q=Cm×q,例如[两行三列] X [三行两列] = [两行两列] 即: A 2 × 3 B 3 × 2 = C 2 × 2 A_{2\times 3}B_{3\times 2}=C_{2\times 2} A2×3B3×2=C2×2
A
=
[
3
2
2
−
2
0
5
]
,
B
=
[
−
1
3
1
2
2
5
]
A=[322−205]
A
×
B
=
[
3
×
(
−
1
)
+
2
×
1
+
2
×
2
3
×
3
+
2
×
2
+
2
×
5
(
−
2
)
×
(
−
1
)
+
0
×
1
+
5
×
2
(
−
2
)
×
3
+
0
×
2
+
5
×
5
]
=
[
3
23
12
19
]
A\times B=[3×(−1)+2×1+2×23×3+2×2+2×5(−2)×(−1)+0×1+5×2(−2)×3+0×2+5×5]
满足结合律和分配率。
矩阵的转置就是行列互换,用
A
T
A^T
AT表示A的转置矩阵。
A
=
[
1
2
3
4
5
6
]
,
A
T
=
[
1
4
2
5
3
6
]
A=[123456]
转置的运算规则
(
A
T
)
T
=
A
(
A
B
)
T
=
B
T
A
T
(
A
+
B
)
T
=
A
T
+
B
T
(A^T)^T=A\qquad(AB)^T=B^TA^T\qquad(A+B)^T=A^T+B^T
(AT)T=A(AB)T=BTAT(A+B)T=AT+BT
一个nxn矩阵,主对角线上的元素都是1,其余元素都是0的,就是单位矩阵。
A
=
[
1
0
0
1
]
,
B
=
[
1
0
0
0
1
0
0
0
1
]
A=[1001]
一个矩阵与其对应的单位矩阵的乘积仍然是这个矩阵。
A
m
×
n
I
n
×
n
=
A
m
×
n
A_{m\times n}I_{n\times n}=A_{m\times n}
Am×nIn×n=Am×n,
A
m
×
n
I
m
×
m
=
A
m
×
n
A_{m\times n}I_{m\times m}=A_{m\times n}
Am×nIm×m=Am×n,其中I为单位矩阵。
一个矩阵A,它的倒数记作
A
−
1
A^{-1}
A−1,只有方阵才有逆矩阵,
A
A
A与
A
−
1
A^{-1}
A−1的乘积是单位矩阵。
计算公式,假设A和B都可逆,则
(
A
B
)
−
1
=
B
−
1
A
−
1
(AB)^{-1}=B^{-1}A^{-1}
(AB)−1=B−1A−1
如果A是可逆矩阵,则A转置的逆等于逆的转置。
一句话,就是没有逆矩阵的矩阵。
A
=
[
1
1
2
2
]
A=[1122]
方程组可以化成增广矩阵,用消元法或向量法求解方程组,消元法类似常规解代数方程无区别。向量法通过求逆矩阵的方式求解。
{
x
+
2
y
+
z
=
8
3
x
+
7
y
+
2
z
=
23
2
x
+
2
y
+
z
=
9
⟹
[
1
2
1
8
3
7
2
23
2
2
1
9
]
\left\{ x+2y+z=83x+7y+2z=232x+2y+z=9
向量法求解推导:
[
1
2
1
3
7
2
2
2
1
]
⏟
A
[
x
y
z
]
⏟
x
[
8
23
9
]
⏟
b
\underbrace{[121372221]
从而得出推导出:
A
x
=
b
⇒
A
−
1
A
x
=
A
−
1
b
⇒
x
=
A
−
1
b
Ax =b\quad\Rightarrow \quad A^{-1}Ax=A^{-1}b\quad\Rightarrow \quad x=A^{-1}b
Ax=b⇒A−1Ax=A−1b⇒x=A−1b
然后就可以通过除法运算得出方程的解了
x
=
A
−
1
b
=
b
A
=
[
1
2
3
]
x=A^{-1}b=\frac{b}{A}=[123]
由此我们可以得出,如果A是奇异矩阵,则它没有逆矩阵,所以方程组将无解。
满足一下条件的成为行阶梯矩阵:
台角的个数,或者阶梯数,就是矩阵的轶,如果矩阵的轶是3,则记作r(A)=3,矩阵的阶梯数就是矩阵中独立向量的个数,如果矩阵的轶是3,那么通过一系列变换,就能转换为有3个阶梯的行阶矩阵,进而转换为最简行阶矩阵。独立向量,就是矩阵中一个不能通过其他向量的线性组合表示的向量。
对于
A
n
×
n
A_{n \times n}
An×n,若r(A)=n,则称A为满轶矩阵,则A是可逆矩阵,是非奇异矩阵,满轶矩阵或矩阵可逆是方程组有唯一解的判断依据。
数学归根结底其实是一种思想,像计算这种累活儿就可以全交给计算机了,你只要把思想怎么算告诉它就可以了。
import numpy as np if __name__ == '__main__': # 生成4x3矩阵,默认[0,1)随机浮点数 a_4_3 = np.random.random((4, 3)) # 生成4x3矩阵,范围[1,12) a_4_3int = np.random.randint(1, 12, (4, 3)) # 生成4x3矩阵,元素都是1 a_1 = np.ones((4, 3)) # 生成4x3矩阵,元素都是0 a_0 = np.zeros((4, 3)) # 生成4x3矩阵,范围[2,25),步长是2 a_range = np.mat(np.arange(2, 25, 2)).reshape(4, 3) # 自定义3x3矩阵 a_self = np.mat('1 2 3;4 5 6; 7 8 9') # 矩阵输出 print('a=\n{}'.format(a_4_3)) print('a=\n{}'.format(a_4_3int)) print('a=\n{}'.format(a_1)) print('a=\n{}'.format(a_0)) print('a=\n{}'.format(a_range)) print('a=\n{}'.format(a_self)) # 获取矩阵的行列数 m, n = np.shape(a_self) print('this is a %d x %d matrix' % (m, n)) # 访问第一行第一列,访问第2行第3列 a_11, a_23 = a_self[0, 0], a_self[1, 2] print(a_11, a_23) # 访问第2行 a_row2 = a_self[1] print(a_row2) # 访问第二列 a_col2 = a_self[:, 2] print(a_col2) a = np.mat('3 2 2; -2 0 5') b = np.mat('-1 3;1 2; 2 5') # 加法 result = np.add(a, a) print(result) # 减法 result = np.subtract(a, a) print(result) # 数乘 result = np.multiply(b, 2) print(result) # 乘法 result = np.dot(a, b) print(result) # 转置 c = np.transpose(b) print(c) # 定义一个4x4的单位矩阵 e = np.eye(4, 4) print(e) a = np.mat('1 2;3 4') # 求a的逆矩阵 a_ni = np.linalg.inv(a) print(a_ni) result = np.dot(a, a_ni) result = np.around(result, decimals=1) print(result) # 求解方程组 A = np.mat(' 1 2 1; 3 7 2; 2 2 1') b = np.mat('8;23;9') result = np.dot(A**-1, b) print(result) # 求矩阵的轶 result = np.linalg.matrix_rank(A) print(result)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。