SymPy - Ma trận
Trong Toán học, ma trận là một mảng số, ký hiệu hoặc biểu thức hai chiều. Lý thuyết về thao tác ma trận đề cập đến việc thực hiện các phép tính số học trên các đối tượng ma trận, tuân theo các quy tắc nhất định.
Phép biến đổi tuyến tính là một trong những ứng dụng quan trọng của ma trận. Nhiều lĩnh vực khoa học, đặc biệt liên quan đến Vật lý sử dụng các ứng dụng liên quan đến ma trận.
Gói SymPy có mô-đun ma trận xử lý ma trận. Nó bao gồm lớp Ma trận có đối tượng đại diện cho một ma trận.
Note: If you want to execute all the snippets in this chapter individually, you need to import the matrix module as shown below −
>>> from sympy.matrices import Matrix
Example
>>> 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]$
Khi thực hiện lệnh trên trong python shell, kết quả sau sẽ được tạo:
[1 2 3 2 3 1]
Ma trận được tạo từ các đối tượng List có kích thước phù hợp. Bạn cũng có thể lấy ma trận bằng cách phân phối các mục danh sách theo số hàng và cột đã chỉ định.
>>> M=Matrix(2,3,[10,40,30,2,6,9])
>>> M
$\displaystyle \left[\begin{matrix}10 & 40 & 30\\2 & 6 & 9\end{matrix}\right]$
Khi thực hiện lệnh trên trong python shell, kết quả sau sẽ được tạo:
[10 40 30 2 6 9]
Ma trận là một đối tượng có thể thay đổi. Mô-đun ma trận cũng cung cấp lớp ImmutableMatrix để thu được ma trận bất biến.
Thao tác cơ bản
Các shape thuộc tính của đối tượng Matrix trả về kích thước của nó.
>>> M.shape
Đầu ra cho đoạn mã trên như sau:
(2,3)
Phương thức row () và col () tương ứng trả về hàng hoặc cột của số được chỉ định.
>>> M.row(0)
$\displaystyle \left[\begin{matrix}10 & 40 & 30\end{matrix}\right]$
Đầu ra cho đoạn mã trên như sau:
[10 40 30]
>>> M.col(1)
$\displaystyle \left[\begin{matrix}40\\6\end{matrix}\right]$
Đầu ra cho đoạn mã trên như sau:
[40 6]
Sử dụng toán tử lát cắt của Python để tìm nạp một hoặc nhiều mục thuộc hàng hoặc cột.
>>> M.row(1)[1:3]
[6, 9]
Lớp ma trận có các phương thức row_del () và col_del () xóa hàng / cột được chỉ định khỏi ma trận đã cho -
>>> M=Matrix(2,3,[10,40,30,2,6,9])
>>> M.col_del(1)
>>> M
Khi thực hiện lệnh trên trong python shell, kết quả sau sẽ được tạo:
Matrix([[10, 30],[ 2, 9]])
Bạn có thể áp dụng kiểu cho đầu ra bằng lệnh sau:
$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$
Bạn nhận được kết quả đầu ra sau khi thực hiện đoạn mã trên -
[10 30 2 9]
>>> M.row_del(0)
>>> M
$\displaystyle \left[\begin{matrix}2 & 9\end{matrix}\right]$
Bạn nhận được kết quả đầu ra sau khi thực hiện đoạn mã trên -
[2 9]
Tương tự, các phương thức row_insert () và col_insert () thêm hàng hoặc cột tại chỉ mục hàng hoặc cột được chỉ định
>>> M1=Matrix([[10,30]])
>>> M=M.row_insert(0,M1)
>>> M
$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$
Bạn nhận được kết quả đầu ra sau khi thực hiện đoạn mã trên -
[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]$
Bạn nhận được kết quả đầu ra sau khi thực hiện đoạn mã trên -
[10 40 30 6 9]
Các phép tính toán học
Các toán tử thông thường +, - và * được định nghĩa để thực hiện các phép cộng, trừ và nhân.
>>> 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]$
Bạn nhận được kết quả đầu ra sau khi thực hiện đoạn mã trên -
[5 7 9 9 7 5]
>>> M1-M2
$\displaystyle \left[\begin{matrix}-3 & -3 & -3\\-3 & -3 & -3\end{matrix}\right]$
Bạn nhận được kết quả đầu ra sau khi thực hiện đoạn mã trên -
[- 3 -3 -3 -3 -3 -3]
Phép nhân ma trận chỉ có thể thực hiện được nếu - Số cột của ma trận thứ nhất phải bằng số hàng của ma trận thứ hai. - Và kết quả sẽ có cùng số hàng với ma trận thứ nhất, và cùng số cột với ma trận thứ hai.
>>> 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]$
Đầu ra cho đoạn mã trên như sau:
[31 29 29 31]
>>> M1.T
$\displaystyle \left[\begin{matrix}1 & 3\\2 & 2\\3 & 1\end{matrix}\right]$
Kết quả sau thu được sau khi thực thi mã:
[1 3 2 2 3 1]
Để tính định thức của ma trận, sử dụng phương pháp det (). Định thức là một giá trị vô hướng có thể được tính toán từ các phần tử của ma trận vuông.
>>> 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]$
Đầu ra cho đoạn mã trên như sau:
[10 20 30 5 8 12 9 6 15]
>>> M.det()
Đầu ra cho đoạn mã trên như sau:
-120
Trình tạo ma trận
SymPy cung cấp nhiều kiểu lớp ma trận đặc biệt. Ví dụ, ma trận nhận dạng, ma trận của tất cả các số 0 và một, v.v. Các lớp này được đặt tên lần lượt là mắt, số không và số một. Ma trận nhận dạng là một ma trận vuông với các phần tử nằm trên đường chéo được đặt là 1, các phần tử còn lại là 0.
Example
from sympy.matrices import eye eye(3)
Output
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]$
Đầu ra cho đoạn mã trên như sau:
[1 0 0 0 1 0 0 0 1]
Trong ma trận đường chéo, các phần tử trên đường chéo được khởi tạo theo các đối số được cung cấp.
>>> 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]$
Đầu ra cho đoạn mã trên như sau:
[1 0 0 0 2 0 0 0 3]
Tất cả các phần tử trong ma trận số không được khởi tạo bằng 0.
>>> from sympy.matrices import zeros
>>> zeros(2,3)
$\displaystyle \left[\begin{matrix}0 & 0 & 0\\0 & 0 & 0\end{matrix}\right]$
Đầu ra cho đoạn mã trên như sau:
[0 0 0 0 0 0]
Tương tự, những cái là ma trận với tất cả các phần tử được đặt thành 1.
>>> from sympy.matrices import ones
>>> ones(2,3)
$\displaystyle \left[\begin{matrix}1 & 1 & 1\\1 & 1 & 1\end{matrix}\right]$
Đầu ra cho đoạn mã trên như sau:
[1 1 1 1 1 1]