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]
Matrix是一个可变的对象。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中执行上述命令,将生成以下输出−
在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()方法。行列式是可以从方阵的元素计算出的标量值。0
>>> 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]
零矩阵中的所有元素都被初始化为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]