SymPy - macierze
W matematyce macierz to dwuwymiarowa tablica liczb, symboli lub wyrażeń. Teoria manipulacji macierzami zajmuje się wykonywaniem operacji arytmetycznych na obiektach macierzowych, podlegających pewnym regułom.
Transformacja liniowa jest jednym z ważnych zastosowań macierzy. Wiele dziedzin naukowych, szczególnie związanych z fizyką, wykorzystuje aplikacje związane z matrycami.
Pakiet SymPy posiada moduł macierzy zajmujący się obsługą macierzy. Zawiera klasę Matrix, której obiekt reprezentuje macierz.
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]$
Po wykonaniu powyższego polecenia w powłoce Pythona wygenerowane zostaną następujące dane wyjściowe -
[1 2 3 2 3 1]
Macierz jest tworzona z obiektów List o odpowiednim rozmiarze. Macierz można również uzyskać, rozdzielając elementy listy w określonej liczbie wierszy i kolumn.
>>> M=Matrix(2,3,[10,40,30,2,6,9])
>>> M
$\displaystyle \left[\begin{matrix}10 & 40 & 30\\2 & 6 & 9\end{matrix}\right]$
Po wykonaniu powyższego polecenia w powłoce Pythona wygenerowane zostaną następujące dane wyjściowe -
[10 40 30 2 6 9]
Matryca to zmienny obiekt. Moduł macierzy udostępnia również klasę ImmutableMatrix do uzyskiwania niezmiennej macierzy.
Podstawowa manipulacja
Plik shape właściwość obiektu Matrix zwraca jego rozmiar.
>>> M.shape
Dane wyjściowe dla powyższego kodu są następujące -
(2,3)
Metody row () i col () odpowiednio zwracają wiersz lub kolumnę o określonej liczbie.
>>> M.row(0)
$\displaystyle \left[\begin{matrix}10 & 40 & 30\end{matrix}\right]$
Dane wyjściowe dla powyższego kodu są następujące -
[10 40 30]
>>> M.col(1)
$\displaystyle \left[\begin{matrix}40\\6\end{matrix}\right]$
Dane wyjściowe dla powyższego kodu są następujące -
[40 6]
Użyj operatora plasterka Pythona, aby pobrać jeden lub więcej elementów należących do wiersza lub kolumny.
>>> M.row(1)[1:3]
[6, 9]
Klasa Matrix ma metody row_del () i col_del (), które usuwają określony wiersz / kolumnę z danej macierzy -
>>> M=Matrix(2,3,[10,40,30,2,6,9])
>>> M.col_del(1)
>>> M
Po wykonaniu powyższego polecenia w powłoce Pythona wygenerowane zostaną następujące dane wyjściowe -
Matrix([[10, 30],[ 2, 9]])
Możesz zastosować styl do wyjścia za pomocą następującego polecenia -
$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$
Po wykonaniu powyższego fragmentu kodu otrzymasz następujące dane wyjściowe -
[10 30 2 9]
>>> M.row_del(0)
>>> M
$\displaystyle \left[\begin{matrix}2 & 9\end{matrix}\right]$
Po wykonaniu powyższego fragmentu kodu otrzymasz następujące dane wyjściowe -
[2 9]
Podobnie metody row_insert () i col_insert () dodają wiersze lub kolumny o określonym indeksie wiersza lub kolumny
>>> M1=Matrix([[10,30]])
>>> M=M.row_insert(0,M1)
>>> M
$\displaystyle \left[\begin{matrix}10 & 30\\2 & 9\end{matrix}\right]$
Po wykonaniu powyższego fragmentu kodu otrzymasz następujące dane wyjściowe -
[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]$
Po wykonaniu powyższego fragmentu kodu otrzymasz następujące dane wyjściowe -
[10 40 30 6 9]
Działania arytmetyczne
Typowe operatory +, - i * są zdefiniowane do wykonywania dodawania, odejmowania i mnożenia.
>>> 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]$
Po wykonaniu powyższego fragmentu kodu otrzymasz następujące dane wyjściowe -
[5 7 9 9 7 5]
>>> M1-M2
$\displaystyle \left[\begin{matrix}-3 & -3 & -3\\-3 & -3 & -3\end{matrix}\right]$
Po wykonaniu powyższego fragmentu kodu otrzymasz następujące dane wyjściowe -
[- 3 -3 -3 -3 -3 -3]
Mnożenie macierzy jest możliwe tylko wtedy, gdy - Liczba kolumn pierwszej macierzy musi być równa liczbie wierszy drugiej macierzy. - Wynik będzie miał taką samą liczbę wierszy jak pierwsza macierz i taką samą liczbę kolumn jak druga macierz.
>>> 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]$
Dane wyjściowe dla powyższego kodu są następujące -
[31 29 29 31]
>>> M1.T
$\displaystyle \left[\begin{matrix}1 & 3\\2 & 2\\3 & 1\end{matrix}\right]$
Po wykonaniu kodu otrzymujemy następujące dane wyjściowe -
[1 3 2 2 3 1]
Aby obliczyć wyznacznik macierzy, użyj metody det (). Wyznacznik to wartość skalarna, którą można obliczyć z elementów macierzy kwadratowej. 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]$
Dane wyjściowe dla powyższego kodu są następujące -
[10 20 30 5 8 12 9 6 15]
>>> M.det()
Dane wyjściowe dla powyższego kodu są następujące -
-120
Konstruktorzy macierzy
SymPy udostępnia wiele specjalnych typów klas macierzy. Na przykład macierz tożsamości, macierz wszystkich zer i jedynek itp. Klasy te nazywane są odpowiednio jako oko, zera i jedynki. Macierz tożsamości to macierz kwadratowa, w której elementy leżące na przekątnej są ustawione na 1, pozostałe elementy mają wartość 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]$
Dane wyjściowe dla powyższego kodu są następujące -
[1 0 0 0 1 0 0 0 1]
W macierzy diag elementy na przekątnej są inicjalizowane zgodnie z podanymi argumentami.
>>> 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]$
Dane wyjściowe dla powyższego kodu są następujące -
[1 0 0 0 2 0 0 0 3]
Wszystkie elementy w macierzy zer są inicjalizowane na 0.
>>> from sympy.matrices import zeros
>>> zeros(2,3)
$\displaystyle \left[\begin{matrix}0 & 0 & 0\\0 & 0 & 0\end{matrix}\right]$
Dane wyjściowe dla powyższego kodu są następujące -
[0 0 0 0 0 0]
Podobnie, jedynki to macierz ze wszystkimi elementami ustawionymi na 1.
>>> from sympy.matrices import ones
>>> ones(2,3)
$\displaystyle \left[\begin{matrix}1 & 1 & 1\\1 & 1 & 1\end{matrix}\right]$
Dane wyjściowe dla powyższego kodu są następujące -
[1 1 1 1 1 1]