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]

矩阵是一个可变的对象。矩阵模块也提供了ImmutableMatrix类来获得不可变的矩阵。

基本操作

矩阵对象的 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的slice操作符来获取属于行或列的一个或多个项目。

>>> M.row(1)[1:3]
[6, 9]

矩阵类有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提供了许多特殊类型的矩阵类。例如,身份矩阵,所有零和一的矩阵,等等。这些类分别被命名为眼睛、零和一。身份矩阵是一个正方形矩阵,对角线上的元素被设置为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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程