TI/Operacje na macierzach

Z Brain-wiki

Macierzą nazywamy tablicę dwuwymiarową.

import numpy
A = numpy.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])
Przypomnienienie

Elementy macierzy indeksuje się podając numer wiersza i kolumny. W Numpy, jak to w Pythonie, zaczynając od 0.

Macierz.svg

Wymiary macierzy możemy uzyskać korzystając z funkcji numpy.shape:

wiersze,kolumny = numpy.shape(A)

Do wytwarzania macierzy o losowych elementach całkowitych (np. do testowania funkcji) przydać się może wyrażnie analogiczne do: A = np.random.randint(10,size = (3,3))

Zadanie: ślad macierzy

Śladem macierzy nazywamy sumę elementów na głównej przekątnej macierzy kwadratowej. Po angielsku ślad to trace i dlatego ślad oznacza się symbolem Tr.

[math] \mathrm{Tr}\ A = \sum_i A_{ii} [/math]

Napisz funkcję obliczającą ślad macierzy.


Zadanie: transpozycja macierzy w miejscu

Transpozycją macierzy nazywamy macierz odbitą wzdłuż głównej przekątnej. Matematycznie wyrażą się to wzorem:

[math] \left(A^\mathrm{T}\right)_{ij} = A_{ji} [/math]

Napisz funkcję transponującą macierz kwadratową w miejscu, czyli bez tworzenia nowej macierzy, poprzez zamianę elementów parami.


Zadanie: ogólna transpozycja macierzy

Napisz funkcję która zwróci transponowaną macierz, niekoniecznie kwadratową.

Użyj funkcji numpy.empty do stworzenia macierzy wynikowej, a następnie wypełnij ja w pętli.


Zadanie: mnożenie macierzy

Mnożąc macierz [math]A[/math] o wymiarze [math]n \times p[/math] z macierzą [math]B[/math] o wymiarze [math]p \times m[/math], otrzymujemy macierz [math]C[/math] o wymiarze [math]n \times m[/math]. Element [math] C_{ij} [/math] przedstawia się wzorem:

[math] C_{ij}=\sum_k A_{ik}B_{kj} [/math]

Napisz funkcję mnożącą macierz A z macierzą B. Użyj funkcji numpy.zeros do stworzenia macierzy wynikowej, a następnie wypełnij ja w pętli.


Zadanie: wyznacznik macierzy

Jeżeli [math]M[/math] jest macierzą kwadratową o wymiarze [math]n[/math], rekurencyjna definicja wyznacznika przedstawia się wzorem:

[math] \left| M \right| = \sum_{k=1}^{n}(-1)^{i+k}a_{ik} \left| M_{/i /k}\right| [/math]

gdzie [math]i[/math] jest dowolne, a [math]M_{/i /k}[/math] oznacza macierz o wymiarze zmiejszonym o 1, przez wykasowanie wiersza [math]i[/math] i kolumny [math]k[/math]. Uwaga: w powyższym wzorze zakłada się, że indeksy elementów macierzy M są numerowane od 1.

Napisz funkcję obliczającą ten wyznacznik (rekurencyjnie).

Do wykorzystania mogą przydać się: numpy.delete albo numpy.r_.