numpy矩阵
矩阵是numpy.matrix类型的对象,该类继承自numpy.ndarray,任何针对多维数组的操作,对矩阵同样有效,但是作为子类矩阵又结合其自身的特点,做了必要的扩充,比如:乘法计算、求逆等。
1. 矩阵对象的创建
- 通过ndarray创建matrix对象
1 | numpy.matrix( |
numpy.mat()
1
2
3
4
5
6
7# 等价于:numpy.matrix(..., copy=False)
# 由该函数创建的矩阵对象与参数中的源容器一定共享数据,无法拥有独立的数据拷贝
numpy.mat(任何可被解释为矩阵的二维容器)
# 该函数可以接受字符串形式的矩阵描述:
# 数据项通过空格分隔,数据行通过分号分隔。例如:'1 2 3; 4 5 6'
numpy.mat(拼块规则)
示例
1 | # 创建matrix操作 |
2. 矩阵的乘法运算
1 | # 矩阵乘法 |
3. 矩阵的逆矩阵
若两个矩阵A、B满足:AB = E (E为单位矩阵),则称B为A的逆矩阵。
单位矩阵
- 在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这种矩阵被称为单位矩阵。
- 它是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1,除此以外全都为0,记为$I_n$或$E_n$ ,通常用I或E来表示。
- 根据单位矩阵的特点,任何矩阵与单位矩阵相乘都等于本身,而且单位矩阵因此独特性有广泛用途。
$$
E_3 =
\left[ \begin{array}{ccc}
1 & 0 & 0\
0 & 1 & 0\
0 & 0 & 1\
\end{array}
\right ]
$$
逆矩阵示例:
1 | e = np.mat("1 2 6; 3 5 7; 4 8 9") |
注意:在计算过程中,可能出现numpy.linalg.LinAlgError: Singular matrix
错误,说明该矩阵不可逆。
4. ndarray提供的矩阵API
ndarray提供了方法让多维数组替代矩阵的运算:
1 | a = np.array([ |
执行结果:
1 | [[ 31 60 74] |
5. 矩阵应用
案例:解线性方程组
假设一帮孩子和家长出去旅游,去程坐的是bus,小孩票价为3元,家长票价为3.2元,共花了118.4;回程坐的是Train,小孩票价为3.5元,家长票价为3.6元,共花了135.2。分别求小孩和家长的人数。使用矩阵求解。表达成方程为:
$$
3x + 3.2y = 118.4\
3.5x + 3.6y = 135.2
$$
表示成矩阵相乘:
$$
\left[ \begin{array}{ccc}
3 & 3.2 \
3.5 & 3.6 \
\end{array} \right]
\times
\left[ \begin{array}{ccc}
x \
y \
\end{array} \right]
=
\left[ \begin{array}{ccc}
118.4 \
135.2 \
\end{array} \right]
$$
1 | import numpy as np |
案例:斐波那契数列
1 1 2 3 5 8 13 21 34 …
1 | X | 1 1 | 1 1 | 1 1 |
1 | import numpy as np |