- SymPy 教程
- SymPy - 首页
- SymPy - 简介
- SymPy - 安装
- SymPy - 符号计算
- SymPy - 数值
- SymPy - 符号
- SymPy - 替换
- SymPy - sympify() 函数
- SymPy - evalf() 函数
- SymPy - Lambdify() 函数
- SymPy - 逻辑表达式
- SymPy - 查询
- SymPy - 简化
- SymPy - 导数
- SymPy - 积分
- SymPy - 矩阵
- SymPy - 函数类
- SymPy - 四元数
- SymPy - 求解器
- SymPy - 绘图
- SymPy - 实体
- SymPy - 集合
- SymPy - 打印
- SymPy 有用资源
- SymPy - 快速指南
- SymPy - 有用资源
- SymPy - 讨论
SymPy - 矩阵
在数学中,矩阵是一个二维数组,包含数字、符号或表达式。矩阵操作理论处理对矩阵对象执行算术运算,但需遵循某些规则。
线性变换是矩阵的重要应用之一。许多科学领域,特别是与物理学相关的领域,都使用与矩阵相关的应用。
SymPy 包含一个处理矩阵的模块,其中包括 Matrix 类,其对象代表一个矩阵。
注意:如果您想单独执行本章中的所有代码片段,则需要导入矩阵模块,如下所示:
>>> from sympy.matrices import Matrix
示例
>>> from sympy.matrices import Matrix >>> m=Matrix([[1,2,3],[2,3,1]]) >>> m $\displaystyle \left[\begin{matrix}1 & 2 & 3\\2 & 3 & 1\end{matrix}\right]$
在 Python shell 中执行上述命令后,将生成以下输出:
[1 2 3 2 3 1]
矩阵是由适当大小的列表对象创建的。您也可以通过将列表项分配到指定数量的行和列来获得矩阵。
>>> M=Matrix(2,3,[10,40,30,2,6,9]) >>> M $\displaystyle \left[\begin{matrix}10 & 40 & 30\\2 & 6 & 9\end{matrix}\right]$
在 Python shell 中执行上述命令后,将生成以下输出:
[10 40 30 2 6 9]
矩阵是一个可变对象。matrices 模块还提供 ImmutableMatrix 类来获取不可变矩阵。
基本操作
Matrix 对象的shape属性返回其大小。
>>> M.shape
上述代码的输出如下:
(2,3)
row() 和 col() 方法分别返回指定编号的行或列。
>>> M.row(0) $\displaystyle \left[\begin{matrix}10 & 40 & 30\end{matrix}\right]$
上述代码的输出如下:
[10 40 30]
>>> M.col(1) $\displaystyle \left[\begin{matrix}40\\6\end{matrix}\right]$
上述代码的输出如下:
[40 6]
使用 Python 的切片运算符来获取属于行或列的一个或多个项目。
>>> M.row(1)[1:3] [6, 9]
Matrix 类具有 row_del() 和 col_del() 方法,可以从给定矩阵中删除指定行/列:
>>> M=Matrix(2,3,[10,40,30,2,6,9]) >>> M.col_del(1) >>> M
在 Python shell 中执行上述命令后,将生成以下输出:
Matrix([[10, 30],[ 2, 9]])
您可以使用以下命令来应用输出样式:
$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$
执行上述代码片段后,您将得到以下输出:
[10 30 2 9]
>>> M.row_del(0) >>> M $\displaystyle \left[\begin{matrix}2 & 9\end{matrix}\right]$
执行上述代码片段后,您将得到以下输出:
[2 9]
类似地,row_insert() 和 col_insert() 方法在指定的行或列索引处添加行或列。
>>> M1=Matrix([[10,30]]) >>> M=M.row_insert(0,M1) >>> M $\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$
执行上述代码片段后,您将得到以下输出:
[10 40 30 2 9]
>>> M2=Matrix([40,6]) >>> M=M.col_insert(1,M2) >>> M $\displaystyle \left[\begin{matrix}10 & 40 & 30\\2 & 6 & 9\end{matrix}\right]$
执行上述代码片段后,您将得到以下输出:
[10 40 30 6 9]
算术运算
通常的运算符 +、- 和 * 用于执行加法、减法和乘法。
>>> M1=Matrix([[1,2,3],[3,2,1]]) >>> M2=Matrix([[4,5,6],[6,5,4]]) >>> M1+M2 $\displaystyle \left[\begin{matrix}5 & 7 & 9\\9 & 7 & 5\end{matrix}\right]$
执行上述代码片段后,您将得到以下输出:
[5 7 9 9 7 5]
>>> M1-M2 $\displaystyle \left[\begin{matrix}-3 & -3 & -3\\-3 & -3 & -3\end{matrix}\right]$
执行上述代码片段后,您将得到以下输出:
[- 3 -3 -3 -3 -3 -3]
矩阵乘法只有在以下情况下才有可能:第一个矩阵的列数必须等于第二个矩阵的行数。结果将具有与第一个矩阵相同数量的行,以及与第二个矩阵相同数量的列。
>>> M1=Matrix([[1,2,3],[3,2,1]]) >>> M2=Matrix([[4,5],[6,6],[5,4]]) >>> M1*M2 $\displaystyle \left[\begin{matrix}31 & 29\\29 & 31\end{matrix}\right]$
上述代码的输出如下:
[31 29 29 31]
>>> M1.T $\displaystyle \left[\begin{matrix}1 & 3\\2 & 2\\3 & 1\end{matrix}\right]$
执行代码后,将获得以下输出:
[1 3 2 2 3 1]
要计算矩阵的行列式,请使用 det() 方法。行列式是一个标量值,可以从方阵的元素计算得到。
>>> M=Matrix(3,3,[10,20,30,5,8,12,9,6,15]) >>> M $\displaystyle \left[\begin{matrix}10 & 20 & 30\\5 & 8 & 12\\9 & 6 & 15\end{matrix}\right]$
上述代码的输出如下:
[10 20 30 5 8 12 9 6 15]
>>> M.det()
上述代码的输出如下:
-120
矩阵构造器
SymPy 提供许多特殊类型的矩阵类。例如,单位矩阵、全零矩阵和全一矩阵等。这些类分别命名为 eye、zeros 和 ones。单位矩阵是一个方阵,其对角线上的元素设置为 1,其余元素为 0。
示例
from sympy.matrices import eye eye(3)
输出
Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
$\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]$
上述代码的输出如下:
[1 0 0 0 1 0 0 0 1]
在 diag 矩阵中,对角线上的元素根据提供的参数进行初始化。
>>> from sympy.matrices import diag >>> diag(1,2,3) $\displaystyle \left[\begin{matrix}1 & 0 & 0\\0 & 2 & 0\\0 & 0 & 3\end{matrix}\right]$
上述代码的输出如下:
[1 0 0 0 2 0 0 0 3]
zeros 矩阵中的所有元素都初始化为 0。
>>> from sympy.matrices import zeros >>> zeros(2,3) $\displaystyle \left[\begin{matrix}0 & 0 & 0\\0 & 0 & 0\end{matrix}\right]$
上述代码的输出如下:
[0 0 0 0 0 0]
同样,ones 矩阵的所有元素都设置为 1。
>>> from sympy.matrices import ones >>> ones(2,3) $\displaystyle \left[\begin{matrix}1 & 1 & 1\\1 & 1 & 1\end{matrix}\right]$
上述代码的输出如下:
[1 1 1 1 1 1]