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]