Bài viết sau cung cấp các hàm và cú pháp thao tác cơ bản với ma trận trong Python. Hai thư viện được sử dụng là sympynumpy. Một số hàm của numpy vẫn nhận parameter của sympy. Thư viện sympy chủ yếu được dùng để render kết quả dạng $\LaTeX$

In [1]:
import sympy as sp
import numpy as np
from IPython.display import display
sp.init_printing()

Khởi tạo một ma trận:

In [2]:
A = np.matrix([[-1, 6, -12], [0, 18, -30], [0, 9, -15]]) # Use matrix, same
B = np.array([[1, 2, -1], [3, 5, 1], [4, 7, -5]]) # Use array, same
print(A)
print(B)
[[ -1   6 -12]
 [  0  18 -30]
 [  0   9 -15]]
[[ 1  2 -1]
 [ 3  5  1]
 [ 4  7 -5]]

Khởi tạo vector

In [3]:
V = np.array([1, 2, 3])
print(V)
[1 2 3]

Trace của ma trận

In [4]:
np.trace(A)
Out[4]:
2

Ma trận chuyển vị

In [5]:
sp.Matrix(A.T)
Out[5]:
$$\left[\begin{matrix}-1 & 0 & 0\\6 & 18 & 9\\-12 & -30 & -15\end{matrix}\right]$$

Ma trận đơn vị

In [6]:
sp.Matrix(np.identity(3, int))
Out[6]:
$$\left[\begin{matrix}1 & 0 & 0\\0 & 1 & 0\\0 & 0 & 1\end{matrix}\right]$$

Cộng trừ hai ma trận

In [7]:
sp.Matrix(A + B)
Out[7]:
$$\left[\begin{matrix}0 & 8 & -13\\3 & 23 & -29\\4 & 16 & -20\end{matrix}\right]$$

Nhân hai ma trận

In [8]:
A = np.matrix([[-1, 6, -12], [0, 18, -30], [0, 9, -15]])
B = np.matrix([[1, 2, -1], [3, 5, 1], [4, 7, -5]])

Element-wise multiplication

In [9]:
sp.Matrix(np.multiply(A, B)) 
Out[9]:
$$\left[\begin{matrix}-1 & 12 & 12\\0 & 90 & -30\\0 & 63 & 75\end{matrix}\right]$$

Phép nhân ma trận

In [10]:
A = sp.Matrix([[-1, 6, -12], [0, 18, -30], [0, 9, -15]])
B = sp.Matrix([[1, 2, -1], [3, 5, 1], [4, 7, -5]])
In [11]:
sp.Matrix(A*B)
Out[11]:
$$\left[\begin{matrix}-31 & -56 & 67\\-66 & -120 & 168\\-33 & -60 & 84\end{matrix}\right]$$
In [12]:
sp.Matrix(A@B)
Out[12]:
$$\left[\begin{matrix}-31 & -56 & 67\\-66 & -120 & 168\\-33 & -60 & 84\end{matrix}\right]$$
In [13]:
sp.Matrix(3*A)
Out[13]:
$$\left[\begin{matrix}-3 & 18 & -36\\0 & 54 & -90\\0 & 27 & -45\end{matrix}\right]$$

Tích vô hướng hai vector

In [14]:
np.dot(np.array([1,2,3]), np.array([3,4,5]))
Out[14]:
26

Định thức của ma trận

In [15]:
A = np.matrix([[1, 2, -1], [3, 5, 1], [4, 7, -5]])
np.linalg.det(A) # Only numpy
Out[15]:
$$5.0$$

Nghịch đảo ma trận

In [16]:
A = np.matrix([[1, 3, -1], [3, 5, 1], [4, 7, -5]]) # Use numpy
sp.Matrix(A**-1) # Ugly result
Out[16]:
$$\left[\begin{matrix}-1.33333333333333 & 0.333333333333333 & 0.333333333333333\\0.791666666666667 & -0.0416666666666667 & -0.166666666666667\\0.0416666666666667 & 0.208333333333333 & -0.166666666666667\end{matrix}\right]$$
In [17]:
A = sp.Matrix([[1, 3, -1], [3, 5, 1], [4, 7, -5]]) # Use sympy
sp.Matrix(A**-1) # mmmmmm
Out[17]:
$$\left[\begin{matrix}- \frac{4}{3} & \frac{1}{3} & \frac{1}{3}\\\frac{19}{24} & - \frac{1}{24} & - \frac{1}{6}\\\frac{1}{24} & \frac{5}{24} & - \frac{1}{6}\end{matrix}\right]$$

Eigenvalue & Eigenvector

In [18]:
A = np.matrix([[-1, 6, -12], [0, 18, -30], [0, 9, -15]])
In [19]:
np.linalg.eig(A)[0] # Only numpy
Out[19]:
array([-1.,  3.,  0.])
In [20]:
np.linalg.eig(A)[1] # Only numpy
Out[20]:
matrix([[ 1.        ,  0.        , -0.71713717],
        [ 0.        ,  0.89442719,  0.5976143 ],
        [ 0.        ,  0.4472136 ,  0.35856858]])

Đối với sympy:

In [21]:
A = sp.Matrix([[-1, 6, -12], [0, 18, -30], [0, 9, -15]])

Hàm eigenvals() trả về dạng (eigenvalue : algebraic multiplicity)

In [22]:
A.eigenvals() # Only with sympy
Out[22]:
$$\left \{ -1 : 1, \quad 0 : 1, \quad 3 : 1\right \}$$

Kết quả trả về gồm (eigenvalue, algebraic multiplicity, eigenvector)

In [23]:
A.eigenvects() # Only with sympy
Out[23]:
$$\left [ \left ( -1, \quad 1, \quad \left [ \left[\begin{matrix}1\\0\\0\end{matrix}\right]\right ]\right ), \quad \left ( 0, \quad 1, \quad \left [ \left[\begin{matrix}-2\\\frac{5}{3}\\1\end{matrix}\right]\right ]\right ), \quad \left ( 3, \quad 1, \quad \left [ \left[\begin{matrix}0\\2\\1\end{matrix}\right]\right ]\right )\right ]$$

Jordan canonical form

Trả về (modal matrix, Jordan canonical form).

Jordan canonical form có thể là spectral form nếu tất cả các eigenvectors đều linearly independent

In [24]:
A.jordan_form() # Only with sympy
Out[24]:
$$\left ( \left[\begin{matrix}1 & -2 & 0\\0 & \frac{5}{3} & 2\\0 & 1 & 1\end{matrix}\right], \quad \left[\begin{matrix}-1 & 0 & 0\\0 & 0 & 0\\0 & 0 & 3\end{matrix}\right]\right )$$