[NP8] Krótki kurs NumPy — Wyznacznik macierzy, macierz jednostkowa, odwrotna i transponowana

DanGolawski
3 min readAug 30, 2021

--

Wyznacznik macierzy to jedno z tych rzeczy na studiach, które większość potrafi obliczyć, ale niewielu potrafi wyjaśnić co to jest i po co to jest…Szczerze mówiąc ja też nie umiem go zdefiniować prostymi słowami, dlatego tylko wspomnę po co ktoś to wymyślił i pokażę jak to obliczać.

Zacznijmy od wykorzystania macierzy — macierze wymyślono po to, żeby ułatwić obliczanie skomplikowanych układów równań liniowych z wieloma niewiadomymi. Pewnie pamiętasz z liceum temat układów równań z klamerkami. Kiedy liczba zmiennych przekraczała 3, wtedy obliczenia zajmowały trochę więcej miejsca niż zwykle. Macierze stają się wtedy bardzo przydatne.

Wyznacznik macierzy to kolejny element układanki w algebrze liniowej, który pomaga nam znajdować np. macierz odwrotną, czy rozwiązywać układy równań za pomocą wzorów Cramera.

Obliczanie macierzy to w miarę prosty temat i opisany w internecie na wiele sposobów, więc nie będę dublować innych artykułów. Dla przypomnienia mogę odesłać Cię do metody Sarrusa.

Ale przejdźmy do NumPy…

Na początek stworzymy sobie prostą macierz kwadratową 2x2 i obliczymy jej wyznacznik używając modułu linalg, który poznaliśmy w poprzednim temacie:

matrix22 = np.array([[2, 4], [3, -5]])
determinant = np.linalg.det(matrix22)
print(determinant) # -22.000000000000004

Ślad macierzy

Ślad macierzy to suma elementów na przekątnej macierzy. W NumPy będziemy obliczać go za pomocą funkcji trace. W przykładzie poniżej trace obliczy nam sumę elementów z przekątnej, czyli z 1, 5 i 9.

matrix33 = np.array([[1,2,3], [4,5,6], [7,8,9]])
tr = np.trace(matrix33)
print(tr) # 15

Macierz jednostkowa

macierz jednostkowa to macierz kwadratowa, w której wszystkie elementy są równe 0, a na przekątnej są same 1. Aby wygenerować taką macierz w NumPy, użyjemy funkcję eye. Jako parametr podajemy tylko rozmiar macierzy, dodatkowo możemy zadeklarować typ danych (domyślnie jest float):

identity_mx = np.eye(4, dtype='int')
# [[1 0 0 0],
# [0 1 0 0],
# [0 0 1 0],
# [0 0 0 1]]

Macierz odwrotna

Macierz jednostkowa to element neutralny mnożenia macierzy i uzyskuje się go po pomnożeniu macierzy i jej macierzy odwrotnej.

Aby w NumPy uzyskać macierz odwrotną naszej macierzy, posłużymy się funkcją inv:

base_matrix = np.array([[1, 2], [3, 4]])
inverse = np.linalg.inv(base_matrix)
print(inverse)
# [[-2. 1. ] # [ 1.5 -0.5]]

Aby sprawdzić, czy nasza macierz jest rzeczywiście macierzą odwrotną, wystarczy po prostu pomnożyć ją z macierzą bazową:

print(base_matrix.dot(inverse))
# [[1.0000000e+00 0.0000000e+00] # [8.8817842e-16 1.0000000e+00]]
print(inverse.dot(base_matrix))
# [[1.0000000e+00 0.0000000e+00] # [8.8817842e-16 1.0000000e+00]]

Jak widzisz w pierwszej kolumnie drugiego wiersza dostaliśmy 8.8817842e-16, czyli liczbę bardzo bliską 0, praktycznie równą 0.

Macierz transponowana

Macierz transponowana to macierz, która powstała przez zamianę wierszy na kolumny i kolumn na wiersze. Tutaj użyjemy funkcji transpose(), która jest w samym NumPy:

base_matrix = np.array([[4,7,1], [2,6,3]])
transpose_mx = np.transpose(base_matrix)
print(transpose_mx)
# [[4 2] # [7 6] # [1 3]]

jeśli nie chce nam się pisać, możemy użyć krótszego zapisu, czyli .T :

base_matrix = np.array([[1, 2], [3, 4]])
print(base_matrix.T)
# [[1 3] # [2 4]]

--

--

DanGolawski

Hi, I am a Frontend Developer. I like both frontend development and general topic of Artificial Intelligence. I hope you enjoy my articles.