矩阵
m × n m \times n m×n 矩阵
[ 1 2 3 4 5 6 7 8 ] \begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \\ 7 & 8 \end{bmatrix} ⎣⎢⎢⎡13572468⎦⎥⎥⎤
import numpy as np
A = np.array([[1,2],[3,4],[5,6],[7,8]])
print(A)
print(A.shape)
[[1 2]
[3 4]
[5 6]
[7 8]]
(4, 2)
方阵
行数和列数相等的一类矩阵,称为方阵
阶数:行数或者列数
[ 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 ] \begin{bmatrix} 1 & 1 & 1 & 1 \\ 2 & 2 & 2 & 2 \\ 3 & 3 & 3 & 3 \\ 4 & 4 & 4 & 4 \\ \end{bmatrix} ⎣⎢⎢⎡1234123412341234⎦⎥⎥⎤
import numpy as np
A = np.array([[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4]])
print(A)
print(A.shape)
[[1 1 1 1]
[2 2 2 2]
[3 3 3 3]
[4 4 4 4]]
(4, 4)
矩阵的转置
行和列上的元素进行位置互换,新矩阵称为原始矩阵的转置矩阵,记为 A T A^T AT
A = [ 1 2 3 4 5 6 7 8 ] A = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \end{bmatrix} A=[15263748]
A T = [ 1 5 2 6 3 7 4 8 ] A^T = \begin{bmatrix} 1 & 5 \\ 2 & 6 \\ 3 & 7 \\ 4 & 8 \end{bmatrix} AT=⎣⎢⎢⎡12345678⎦⎥⎥⎤
import numpy as np
A = np.array([[1,2,3,4],[5,6,7,8]])
print("原始矩阵:")
print(A)
print("转置矩阵:")
print(A.T)
原始矩阵:
[[1 2 3 4]
[5 6 7 8]]
转置矩阵:
[[1 5]
[2 6]
[3 7]
[4 8]]
对称矩阵
原矩阵与转置后新矩阵相等,前置矩阵是方阵
S
i
j
=
S
j
i
S_{ij}=S_{ji}
Sij=Sji
A = [ 1 2 3 4 2 5 6 7 3 6 8 9 4 7 9 0 ] A = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 5 & 6 & 7 \\ 3 & 6 & 8 & 9 \\ 4 & 7 & 9 & 0 \end{bmatrix} A=⎣⎢⎢⎡1234256736894790⎦⎥⎥⎤
A T ( 对 称 矩 阵 ) = [ 1 2 3 4 2 5 6 7 3 6 8 9 4 7 9 0 ] A^T(对称矩阵) = \begin{bmatrix} 1 & 2 & 3 & 4 \\ 2 & 5 & 6 & 7 \\ 3 & 6 & 8 & 9 \\ 4 & 7 & 9 & 0 \end{bmatrix} AT(对称矩阵)=⎣⎢⎢⎡1234256736894790⎦⎥⎥⎤
import numpy as np
A = np.array([[1,2,3,4],[2,5,6,7],[3,6,8,9],[4,7,9,0]])
print("原始矩阵:")
print(A)
print("转置矩阵:")
print(A.T)
原始矩阵:
[[1 2 3 4]
[2 5 6 7]
[3 6 8 9]
[4 7 9 0]]
转置矩阵:
[[1 2 3 4]
[2 5 6 7]
[3 6 8 9]
[4 7 9 0]]
零矩阵 np.zeros()
所有元素都是0的矩阵
O
=
[
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
]
O = \begin{bmatrix} 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 \end{bmatrix}
O=⎣⎡000000000000000⎦⎤
import numpy as np
A = np.zeros([5,3])
print(A)
print(A.shape)
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
(5, 3)
对角矩阵 np.diag()
非对角线位置上矩阵的元素全部都是0,这种矩阵称为对角矩阵
[
1
0
0
0
0
0
2
0
0
0
0
0
3
0
0
0
0
0
4
0
0
0
0
0
5
]
\begin{bmatrix} 1 & 0 & 0 & 0 & 0\\ 0 & 2 & 0 & 0 & 0\\ 0 & 0 & 3 & 0 & 0\\ 0 & 0 & 0 & 4 & 0\\ 0 & 0 & 0 & 0 & 5 \end{bmatrix}
⎣⎢⎢⎢⎢⎡1000002000003000004000005⎦⎥⎥⎥⎥⎤
import numpy as np
A = np.diag([1,2,3,4,5])
print(A)
print(A.shape)
[[1 0 0 0 0]
[0 2 0 0 0]
[0 0 3 0 0]
[0 0 0 4 0]
[0 0 0 0 5]]
(5, 5)
单位矩阵 np.eye()
指对角位置上的元素都是1,其余元素均是0的特殊矩阵
I
=
[
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
1
]
I = \begin{bmatrix} 1 & 0 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 & 0\\ 0 & 0 & 1 & 0 & 0\\ 0 & 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 0 & 1 \end{bmatrix}
I=⎣⎢⎢⎢⎢⎡1000001000001000001000001⎦⎥⎥⎥⎥⎤
import numpy as np
I = np.eye(5)
print(I)
print(I.shape)
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
(5, 5)
矩阵的加法
参与计算的两个矩阵对应位置上的元素分别进行相加,才能得到最终结果的矩阵
[ 1 2 3 4 5 6 ] + [ 10 20 30 40 50 60 ] = [ 11 22 33 44 55 66 ] \begin{bmatrix} 1 & 2\\ 3 & 4\\ 5 & 6 \end{bmatrix} + \begin{bmatrix} 10 & 20\\ 30 & 40\\ 50 & 60 \end{bmatrix}= \begin{bmatrix} 11 & 22\\ 33 & 44\\ 55 & 66 \end{bmatrix} ⎣⎡135246⎦⎤+⎣⎡103050204060⎦⎤=⎣⎡113355224466⎦⎤
import numpy as np
A = np.array([[1,2],[3,4],[5,6]])
B = np.array([[10,20],[30,40],[50,60]])
print(A+B)
[[11 22]
[33 44]
[55 66]]
矩阵的数量乘法
参与运算的标量数字分别与矩阵的每一个元素相乘,得到结果矩阵对应的新元素
2
×
[
1
4
2
5
3
6
]
=
[
2
8
4
10
6
12
]
2 \times \begin{bmatrix} 1 & 4\\ 2 & 5\\ 3 & 6 \end{bmatrix}= \begin{bmatrix} 2 & 8\\ 4 & 10\\ 6 & 12 \end{bmatrix}
2×⎣⎡123456⎦⎤=⎣⎡24681012⎦⎤
import numpy as np
A = np.array([[1,4],[2,5],[3,6]])
print(2*A)
[[ 2 8]
[ 4 10]
[ 6 12]]
矩阵与矩阵的乘法 np.dot()
[ 1 2 3 4 5 6 7 8 ] × [ 2 3 4 5 6 7 8 9 ] = [ 14 17 20 23 30 37 44 51 46 57 68 79 62 77 92 107 ] \begin{bmatrix} 1 & 2\\ 3 & 4\\ 5 & 6\\ 7 & 8 \end{bmatrix} \times \begin{bmatrix} 2 & 3 & 4 & 5\\ 6 & 7 & 8 & 9 \end{bmatrix}= \begin{bmatrix} 14 & 17 & 20 & 23\\ 30 & 37 & 44 & 51\\ 46 & 57 & 68 & 79\\ 62 & 77 & 92 & 107 \end{bmatrix} ⎣⎢⎢⎡13572468⎦⎥⎥⎤×[26374859]=⎣⎢⎢⎡143046621737577720446892235179107⎦⎥⎥⎤
import numpy as np
A = np.array([[1,2],[3,4],[5,6],[7,8]])
B = np.array([[2,3,4,5],[6,7,8,9]])
print(np.dot(A,B))
[[ 14 17 20 23]
[ 30 37 44 51]
[ 46 57 68 79]
[ 62 77 92 107]]
矩阵乘以向量
矩阵的每行和列向量的对应元素分别相乘之后再进行相加
[
1
2
3
4
5
6
]
[
4
5
]
=
[
1
×
4
+
2
×
5
3
×
4
+
4
×
5
5
×
4
+
6
×
5
]
=
[
14
32
50
]
\begin{bmatrix} 1 & 2\\ 3 & 4 \\ 5 & 6 \end{bmatrix} \begin{bmatrix} 4\\ 5 \end{bmatrix}= \begin{bmatrix} 1\times4 + 2\times5\\ 3\times4 + 4\times5\\ 5\times4 + 6\times5\\ \end{bmatrix}= \begin{bmatrix} 14\\ 32\\ 50 \end{bmatrix}
⎣⎡135246⎦⎤[45]=⎣⎡1×4+2×53×4+4×55×4+6×5⎦⎤=⎣⎡143250⎦⎤
import numpy as np
A = np.array([[1,2],[3,4],[5,6]])
x = np.array([[4,5]]).T
print(np.dot(A,x))
[[14]
[32]
[50]]
求解线性方程组
{ x 1 + 2 x 2 + 3 x 3 = 14 x 1 − x 2 + 4 x 3 = 11 2 x 1 + 3 x 2 − x 3 = 5 \left\{\begin{aligned} x_1+2x_2+3x_3&=14\\ x_1-x_2+4x_3&=11\\ 2x_1+3x_2-x_3&=5 \end{aligned}\right. ⎩⎪⎨⎪⎧x1+2x2+3x3x1−x2+4x32x1+3x2−x3=14=11=5
import numpy as np
from scipy import linalg
A = np.array([[1,2,3],[1,-1,4],[2,3,-1]])
y = np.array([14,11,5])
x = linalg.solve(A,y)
print(x)
[1. 2. 3.]