Skip to content

Lineare Algebra

Elementweise Operationen sind nicht immer das, was wir erwarten. Wir müssen unterscheiden zwischen einem zweidimensionalen array und der Interpretation desselben als Matrix. So ist z.B. das Produkt zweier Matrizen nicht das elementweise Produkt, sondern das Produkt der Zeilen der ersten Matrix mit den Spalten der zweiten Matrix. Daher gibt es spezielle Operatoren für lineare Algebra.

np.arange(4) * np.arange(4)          # Elementweise Operation: array([0, 1, 4, 9])
np.dot(np.arange(4), np.arange(4))   # Skalarprodukt:          14
np.outer(np.arange(4), np.arange(4)) # Äußeres Produkt:        array([[0, 0, 0, 0],
                                     #                                [0, 1, 2, 3],
                                     #                                [0, 2, 4, 6],
                                     #                                [0, 3, 6, 9]])

Die Matrix-Multiplikation erfolgt mit @:

A = np.arange(9).reshape(3,3) #                         array([[0, 1, 2],
                              #                                [3, 4, 5],
                              #                                [6, 7, 8]])
A * A                         # Elementweise Operation: array([[ 0,  1,  4],
                              #                                [ 9, 16, 25],
                              #                                [36, 49, 64]])
A @ A                         # Matrix-Multiplikation:  array([[ 15,  18,  21],
                              #                                [ 42,  54,  66],
                              #                                [ 69,  90, 111]])

Die Norm eines Vektors kann mit np.linalg.norm berechnet werden:

np.linalg.norm(np.arange(3))

Eigenwerte und -Vektoren sowie die Determinante einer Matrix können mit np.linalg.eig berechnet werden:

A = np.array([[2,1], [1,2]])
np.linalg.eig(A).eigenvalues  # array([3., 1.])
np.linalg.eig(A).eigenvectors # array([[ 0.70710678, -0.70710678],
                              #        [ 0.70710678,  0.70710678]])
np.linalg.det(A)              # 2.9999999999999996