矩阵由多个长度相等的向量组成,其中的每列或者每行就是一个向量。因此把向量延伸一下就能得到矩阵(Matrix)。从数据结构的角度看,向量是一维数组,那矩阵就是一个二维数组。如果二维数组里绝大多数元素都是 0 或者不存在的值,那么我们就称这个矩阵很稀疏。

矩阵还有一种比较好理解的方式,就是用方程组来表达。比如方程组:

然后把每一个变量的系数写在对齐的一列中,可以写成矩阵:

也可以写成矩阵:

第 1 个矩阵称为方程组的系数矩阵,第 2 个矩阵称为方程组的增广矩阵

矩阵用加粗的斜体大写字母表示,例如 X,而 X12,X22,…,Xnm 等等,表示矩阵中的每个元素,而这里面的 n 和 m 分别表示矩阵的行维数和列维数。

矩阵的运算

和向量一样,矩阵的和标量之间的加法和乘法,需要把标量和矩阵中的每个元素相加或相乘,就能得到结果。

矩阵和矩阵之间加法,只要保证两个矩阵具有相同的行维度和列维度,就可以把对应的元素两两相加。比如下面:

那么:

矩阵的乘法形式:

image.png

其中,矩阵 Z 为矩阵 X 和 Y 的乘积,X 是形状为 i x k 的矩阵,而 Y 是形状为 k × j 的矩阵。X 的列数 k 必须和 Y 的行数 k 相等,两者才可以进行这样的乘法。

image.png

还有一个比较常见的运算,是矩阵的转置。这个比较常见,写代码的时候我们有遇到,下面直接用 DataFrame 数据演示下:

1
2
3
4
5
6
# 导入包
import seaborn as sns
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
1
2
3
4
5
6
7
# 拿到小费数据集
tips = sns.load_dataset('tips')

# 数据介绍: total_bill列为消费总金额;tip列为小费金额;sex列为顾客性别;smoker列为顾客是否抽烟;day列为消费的星期;time列为聚餐的时间段;size列为聚餐人数

# 查看前5行数据
tips.head()

image.png

1
tips.describe()

image.png

1
2
# DataFrame 数据格式的转置,和矩阵转置的性质一致。
tips.describe().T

image.png

矩阵的转置,也就是上面两个数据集的行列转换方式。