---
title: "Python与矩阵"
date: 2020-04-26
description: "linear algebra"
image: "https://cdn.jsdelivr.net/gh/Leslie-Lu/WeChatOfficialAccount/img/202409041318020.webp"
categories:
- linear algebra
- matrix
- python
format:
html:
shift-heading-level-by: 1
include-in-header:
- text: |
<style type="text/css">
hr.dinkus {
width: 50px;
margin: 2em auto 2em;
border-top: 5px dotted #454545;
}
div.column-margin+hr.dinkus {
margin: 1em auto 2em;
}
</style>
jupyter: python3
---
矩阵可以被看作是排列的向量或堆放在一起的数字。矩阵的意义非常重要,它可以作用在一个具体的向量上,使向量空间位置发生变换。
## 矩阵的Python表示
对于矩阵而言,最直观的描述就是一个`m*n`的数字方阵,它可以看作是n个m维列向量从左到右并排摆放,也可以看作是m个n维行向量从上到下进行叠放。
```{python}
# 矩阵的表示:
import numpy as np
A = np.array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
print(A)
# 在形容矩阵的形状和规模时,一般采用其行数和列数来进行描述
print(A.shape)
# 通过矩阵A的shape属性,可以获取一个表示矩阵规模的元组对象
# 这个元组对象包含两个元素:第一个元素表示行数,第二个表示列数
```
前面提到,n维的行向量可以看作是一个`1*n`的特殊矩阵;同理,n维的列向量也同样可以看作是一个`n*1`的特殊矩阵。这样,一方面,可以将矩阵和向量的Python表示方法统一起来;另一方面,在接下来要介绍的矩阵与向量的乘法运算中,可以将其看作是矩阵与矩阵之间乘法的一种特殊形式,从而统一运算方式。
```{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. 方阵:行数和列数相等的一类矩阵,称为方阵,其行数或列数称为它的阶数。
```{python}
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)
```
2. 对称矩阵:开始介绍对称矩阵之前,先说明一下矩阵转置的概念。
对于指定的矩阵,若将其行和列上的元素进行位置互换,即原行元素作新列,原列元素作新行,即可得到一个全新的矩阵,这个新矩阵称为原矩阵的转置矩阵,行和列互换的矩阵操作就称为矩阵的转置。
若原矩阵和转置后新得到的矩阵相等,那么将原矩阵称为对称矩阵。由此可见,矩阵对称的前提条件是该矩阵首先必须是一个方阵;此外,对称矩阵的一个典型特征为:沿着从左上到右下的对角线,关于这条对角线相互对称的元素都是彼此相等的。
可以说,对称矩阵是最重要的矩阵,在矩阵的相关分析中扮演极其重要的角色。
```{python}
# 矩阵的转置:
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)
```
3. 零矩阵:所有元素均为0的矩阵,称为零矩阵。
```{python}
A = np.zeros([5, 3])
print(A)
```
4. 对角矩阵:若方阵在非对角线位置上元素全部为0,则称为对角矩阵,0元素的位置可以省去不写。
```{python}
A = np.diag([1, 2, 3, 4, 5])
print(A)
print(A.T)
```
5. 单位矩阵/单位阵:对角位置上元素全部为1,其余位置元素均为0的特殊对角矩阵,称为单位矩阵。
```{python}
I = np.eye(5)
print(I)
```