Python与矩阵

linear algebra
linear algebra
matrix
python
Author
Published

Sunday, April 26, 2020

矩阵可以被看作是排列的向量或堆放在一起的数字。矩阵的意义非常重要,它可以作用在一个具体的向量上,使向量空间位置发生变换。

矩阵的Python表示

对于矩阵而言,最直观的描述就是一个m*n的数字方阵,它可以看作是n个m维列向量从左到右并排摆放,也可以看作是m个n维行向量从上到下进行叠放。

# 矩阵的表示:
import numpy as np
A = np.array([[1, 2],
              [3, 4],
              [5, 6],
              [7, 8]])
print(A)
# 在形容矩阵的形状和规模时,一般采用其行数和列数来进行描述
print(A.shape)
# 通过矩阵A的shape属性,可以获取一个表示矩阵规模的元组对象
# 这个元组对象包含两个元素:第一个元素表示行数,第二个表示列数
[[1 2]
 [3 4]
 [5 6]
 [7 8]]
(4, 2)

前面提到,n维的行向量可以看作是一个1*n的特殊矩阵;同理,n维的列向量也同样可以看作是一个n*1的特殊矩阵。这样,一方面,可以将矩阵和向量的Python表示方法统一起来;另一方面,在接下来要介绍的矩阵与向量的乘法运算中,可以将其看作是矩阵与矩阵之间乘法的一种特殊形式,从而统一运算方式。

B=np.array([[1,2,3,4]]) #行向量;用生成矩阵的方法生成了一个1*4的矩阵,用来表示一个四维的行向量
print(B.shape)
print(B.T) #转置成列向量;因为是矩阵形式,所以可以用转置方法,得到对应的四维列向量
C=np.array([[1],
            [2],
            [3],
            [4]]) #列向量
print(C)
print(C.shape)
(1, 4)
[[1]
 [2]
 [3]
 [4]]
[[1]
 [2]
 [3]
 [4]]
(4, 1)

特殊形态的矩阵

  1. 方阵:行数和列数相等的一类矩阵,称为方阵,其行数或列数称为它的阶数。
A = np.array([[1, 1, 1, 1],
              [2, 2, 2, 2],
              [3, 3, 3, 3],
              [4, 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)
  1. 对称矩阵:开始介绍对称矩阵之前,先说明一下矩阵转置的概念。

    对于指定的矩阵,若将其行和列上的元素进行位置互换,即原行元素作新列,原列元素作新行,即可得到一个全新的矩阵,这个新矩阵称为原矩阵的转置矩阵,行和列互换的矩阵操作就称为矩阵的转置。

    若原矩阵和转置后新得到的矩阵相等,那么将原矩阵称为对称矩阵。由此可见,矩阵对称的前提条件是该矩阵首先必须是一个方阵;此外,对称矩阵的一个典型特征为:沿着从左上到右下的对角线,关于这条对角线相互对称的元素都是彼此相等的。

    可以说,对称矩阵是最重要的矩阵,在矩阵的相关分析中扮演极其重要的角色。

# 矩阵的转置:
import numpy as np
A = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8]])
print(A)
print(A.T)
# 对称矩阵:
import numpy as np
S = np.array([[1, 2, 3, 4],
              [2, 5, 6, 7],
              [3, 6, 8, 9],
              [4, 7, 9, 0]])
print(S)
print(S.T)
[[1 2 3 4]
 [5 6 7 8]]
[[1 5]
 [2 6]
 [3 7]
 [4 8]]
[[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]]
  1. 零矩阵:所有元素均为0的矩阵,称为零矩阵。
A = np.zeros([5, 3])
print(A)
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
  1. 对角矩阵:若方阵在非对角线位置上元素全部为0,则称为对角矩阵,0元素的位置可以省去不写。
A = np.diag([1, 2, 3, 4, 5])
print(A)
print(A.T)
[[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]]
[[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]]
  1. 单位矩阵/单位阵:对角位置上元素全部为1,其余位置元素均为0的特殊对角矩阵,称为单位矩阵。
I = np.eye(5)
print(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.]]