通过sympy.matrices
可以创建矩阵
imprort sympy
from sympy.interactive.printing import init_printing
from sympy.matrices import Matrix
M = Matrix([[1,0,0], [0,0,0]])
sympy.latex(M)
sympy.latex(Matrix([M, (0, 0, -1)]))
sympy.latex(Matrix([[1, 2, 3]]))
sympy.latex(Matrix([1, 2, 3]))
效果如下
[ 1 0 0 0 0 0 ] [ 1 0 0 0 0 0 0 0 ? 1 ] [ 1 2 3 ] [ 1 2 3 ] \left[\begin{matrix}1 & 0 & 0\\0 & 0 & 0\end{matrix}\right]\quad \left[\begin{matrix}1 & 0 & 0\\0 & 0 & 0\\0 & 0 & -1\end{matrix}\right]\quad\left[\begin{matrix}1 & 2 & 3\end{matrix}\right]\quad \left[\begin{matrix}1\\2\\3\end{matrix}\right] [10?00?00?] ?100?000?00?1? ?[1?2?3?] ?123? ?
符号矩阵在索引上和数值矩阵区别不大,但Matrix有一个非常霸道的创建方法,示例如下,即可根据匿名函数来确定对应元素的值。
m = Matrix(3,4, lambda i,j : i**2+j**2)
sympy.latex(m)
[ 0 1 4 9 1 2 5 10 4 5 8 13 ] \left[\begin{matrix}0 & 1 & 4 & 9\\1 & 2 & 5 & 10\\4 & 5 & 8 & 13\end{matrix}\right] ?014?125?458?91013? ?
除了Matrix,sympy.matrices还提供了单位矩阵eye;全零矩阵zeros;全1矩阵ones,对角矩阵diag等特殊矩阵的生成方法,这些方法相对来说比较简单,故不作示范。
from sympy.matrices import eye, zeros, ones, diag
randMatrix可生成随机矩阵,其参数包括
示例如下
from sympy.matrices import randMatrix
m = randMatrix(3, symmetric=True, percent=50)
print(sympy.latex(m))
[ 24 37 0 37 59 42 0 42 0 ] \left[\begin{matrix}24 & 37 & 0\\37 & 59 & 42\\0 & 42 & 0\end{matrix}\right] ?24370?375942?0420? ?
Matrix重载了部分运算符,支持矩阵和矩阵之间的加减法,以及矩阵乘法和数乘,下面列举的表达式都是符合条件的,但不支持矩阵和数值之间的加减法。
m + m
m - m
m * 2
m * m.T # 注意矩阵乘法需要照顾彼此的shape
'''
Matrix([
[ 98, 112, 154],
[112, 130, 184],
[154, 184, 274]])
'''
此外,通过调用applyfunc方法,可以对矩阵的单个元素进行函数操作
y = m.applyfunc(lambda x : x**2)
print(sympy.latex(y))
[ 0 1 16 81 1 4 25 100 16 25 64 169 ] \left[\begin{matrix}0 & 1 & 16 & 81\\1 & 4 & 25 & 100\\16 & 25 & 64 & 169\end{matrix}\right] ?0116?1425?162564?81100169? ?