6  Matrizen (III)

6.1 Spezielle Matrizen

6.1.1 Einsen-Matrix

Eine (m×n)-Matrix, die nur aus Einsen besteht, schreibt man meist als 1mn oder Jmn. Die Indizes entfallen, wenn die Dimensionen klar sind. Nützlich sind vor allem Zeilen- oder Spaltenvektoren aus Einsen. Mit ihnen kann man leicht die Zeilen- oder Spaltensummen von Matrizen ermitteln.

Beispiel: Sei
A=[147258369]. Mit ι3=J3,1 bezeichnen man häufig den Spaltenvektor aus drei Einsen. Der Zeilenvektor aus drei Einsen ist dann ι3, also der transponierte Spaltenvektor.

A <- matrix(1:9, 3, 3)
iota <- matrix(1, 3, 1)

Dann ist

t(iota) %*% A
     [,1] [,2] [,3]
[1,]    6   15   24

der Zeilenvektor der Spaltensummen und

A %*% iota
     [,1]
[1,]   12
[2,]   15
[3,]   18

der Spaltenvektor der Zeilensummen.

Manchmal begegnet man in ökonometrischen Texten dem Ausdruck ιnιn. Dieser Ausdruck entspricht schlicht und einfach dem Skalar n, denn [111][111]=11+11++11=n.

In R ist es sehr einfach, Einsenmatrizen zu erzeugen, z.B.

J <- matrix(1, nrow=2, ncol=4)
J
     [,1] [,2] [,3] [,4]
[1,]    1    1    1    1
[2,]    1    1    1    1

6.1.2 Nullen-Matrix

Eine (m×n)-Matrix aus Nullen schreibt man meist als 0mn. Wenn die Dimension sich klar aus dem Kontext ergibt, kann der Subindex entfallen. Addiert man eine Nullenmatrix zu einer beliebigen Matrix A passender Dimensionen, so erhält man wieder A. In R werden Nullenmatrizen auf die gleiche Weise wie Einsenmatrizen generiert.

6.1.3 Permutationsmatrizen

Ordnet man die Spalten (oder Zeilen) einer Einheitsmatrix in einer anderen Reihenfolge an, dann erhält man eine Permutationsmatrix. Permutationsmatrizen heißen so, weil sie die Elemente eines Vektors permutieren (d.h. in eine andere Reihenfolge bringen). Das folgende Beispiel zeigt das für eine (4×4)-Matrix. [0010000110000100][x1x2x3x4]=[x3x4x1x2].

6.1.4 Diagonalmatrizen

Eine Matrix, bei der alle Nichtdiagonalelemente Null sind, nennt man Diagonalmatrix. Beispielsweise sind Einheitsmatrizen Diagonalmatrizen. Die Funktion diag, die wir schon zum Erzeugen von Einheitsmatrizen kennen gelernt haben, dient auch zum Erzeugen von allgemeinen Diagonalmatrizen. Wenn das Argument ein Vektor der Länge n ist, dann erhält man eine (n×n)-Diagonalmatrix mit den Vektorelementen auf der Diagonale.

Beispiel:

v <- c(1,3,5,7,9)
diag(v)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    0    0    0    0
[2,]    0    3    0    0    0
[3,]    0    0    5    0    0
[4,]    0    0    0    7    0
[5,]    0    0    0    0    9

6.1.5 Dreiecksmatrizen

In einer oberen Dreiecksmatrix sind alle Elemente unterhalb der Diagonale Null. In einer unteren Dreiecksmatrix sind die Elemente über der Diagonalen Null. Bei Dreiecksmatrizen ist die Determinante das Produkt aller Diagonalelemente. Wenn A eine (n×n)-Dreiecksmatrix ist, dann gilt also det(A)=i=1naii. Da Diagonalmatrizen ein Spezialfall von Dreiecksmatrizen sind, gilt das natürlich auch für Diagonalmatrizen.

Beispiel:

A <- diag(c(1,3,5,7))
det(A)
[1] 105

6.1.6 Orthogonale Matrizen

Eine (n×n)-Matrix A heißt orthogonal, wenn AA=AA=I. Bei einer orthogonalen Matrix ist also die Transponierte die Inverse.

Wählt man zwei beliebige unterschiedliche Spalten (oder Zeilen) einer orthogonalen Matrizen, dann ist deren inneres Produkt 0, d.h. sie sind rechtwinklig (orthogonal) zueinander. Das innere Produkt einer Spalte mit sich selber ist 1. Die Spalten haben also die Norm 1. Die (2×2)-Rotationsmatrizen, die wir in kennen gelernt haben, sind ein Beispiel für orthogonale Matrizen. Lineare Transformationen mit einer orthogonalen Matrix verändern folglich weder die Winkel noch führen sie zu einer Streckung oder Stauchung.

Bei der numerischen Überprüfung auf Orthogonalität müssen mögliche Rundungsfehler berücksichtigt werden.

Beispiel:

Die 35-Grad-Rotationsmatrix

M <- matrix(c(cos((35/180)*pi),sin((35/180)*pi),-sin((35/180)*pi),cos((35/180)*pi)),2,2)

ist orthogonal. Wenn man jedoch mit der all-Funktion nachprüft, ob MM=I ist, dann erhält man das falsche Ergebnis:

all(t(M) %*% M == diag(2))
[1] FALSE

Das liegt an Rundungsfehlern. Das Tükische ist, dass R dennoch die Einheitsmatrix ausgibt, wenn man die zugehörige Transponierte von links an die 35-Grad-Rotationsmatrix multipliziert.

t(M) %*% M
              [,1]          [,2]
[1,]  1.000000e+00 -4.032299e-19
[2,] -4.032299e-19  1.000000e+00

Das liegt daran, dass R standardmäßig nur 6 Nachkommastellen ausgibt. Erst wenn man die Anzahl der auszugebenden Nachkommastellen auf (z.B) 16 Stellen erhöht, sieht man die Rundungsfehler.

options(digits=16)
t(M) %*% M
                       [,1]                   [,2]
[1,]  9.999999999999999e-01 -4.032298572641752e-19
[2,] -4.032298572641752e-19  9.999999999999999e-01
options(digits=6)

Die Rundungsfehler sind zwar extrem klein, aber die Ergebnismatrix ist offenbar nicht exakt gleich der Einheitsmatrix. Durch Runden auf (z.B.) 12 Stellen nach dem Komma ergibt sich aber das richtige Ergebnis,

all(round(t(M) %*% M, 12) == diag(2))
[1] TRUE

6.1.7 Idempotente Matrizen

Wenn für eine quadratische (n×n)-Matrix A gilt A=AA, dann heißt A idempotent. Da die Determinante eines Matrixprodukt dem Produkt der beiden Determinanten entsprechen muss, können die Determinanten von idempotenten Matrizen nur 0 oder 1 sein.

6.2 Partitionierte Matrizen

In der Ökonometrie gibt es Situationen, in denen Matrizen in einzelne Blöcke unterteilt werden. Man spricht dann von partitionierten Matrizen. Das sieht z.B. so aus: A=[A11A12A21A22] Die Blöcke müssen geeignete Dimensionen haben. Zum Beispiel könnte A11 eine (m1×n1)-Matrix sein, A12 eine (m1×n2)-Matrix, A21 eine (m2×n1)-Matrix und A22 eine (m2×n2)-Matrix. Dann ist A von den Dimensionen ((m1+m2)×(n1+n2)).

Partitionierte Matrizen bieten eine elegante Möglichkeit, komplexe Daten strukturiert zu bearbeiten.

Für viele Matrixoperationen können die Blöcke so ähnlich behandelt werden wie normale Matrixelemente. Beispielsweise gilt für die Transponierte A=[A11A21A12A22]. Und für die Summe von geeignet partitionierten Matrizen gilt A+B=[A11+B11A12+B12A21+B21A22+B22]. Wenn die Dimensionen der Blöcke alle zueinander passen, gilt für die Matrizenmultiplikation AB=[A11B11+A12B21A11B12+A12B22A21B11+A22B21A21B12+A22B22]. Wenn in einer partitionierten Matrix A alle Blöcke außer den Diagonalblöcken Nullmatrizen sind, und wenn die Diagonalblöcke außerdem invertierbar sind, dann gilt A1=[A11100A221].

6.3 Tensoren

In der Machine-Learning-Literatur spielen Vektoren und Matrizen eine extrem wichtige Rolle. Im Bereich des Machine-Learnings wird jedoch meistens eine bequeme Verallgemeinerung von Matrizen, Vektoren und Skalaren benutzt, nämlich Tensoren. Ein Tensor der Dimension 0 (auch 0-Tensor oder 0D-Tensor) ist ein Skalar. Ein 1-Tensor oder 1D-Tensor ist ein Vektor. Ein 2-Tensor oder 2D-Tensor ist eine Matrix. Man kann Tensoren nun für noch höhere Dimensionen definieren. Bei einem 3D-Tensor sind die Daten nicht nur in Form eines Rechtecks angeordnet (wie bei einer Matrix), sondern man hat noch eine weitere Dimension. Die Daten liegen quasi in Würfelform vor, die das folgende Bild skizziert, in dem die Daten eines 3D-Tensors der Dimensionen (5×4×3) gezeigt werden (Sie können das Bild mit der Maus bewegen):

Hier liegen quasi drei Matrizen geschichtet hintereinander. Die ersten beiden Indizes geben die Position innerhalb der Matrizen an, der dritte Index gibt an, um welche Schicht es sich handelt.

Tensoren können analog auch für noch höhere Dimensionen definiert werden, sind dann aber nicht mehr anschaulich darstellbar. Für Tensoren lässt sich die Matrixmultiplikation verallgemeinern, aber darauf gehen wir in diesem Kurs nicht ein.

Noch ein Hinweis zum Begriff “Dimension”: Eine Matrix ist ein 2D-Tensor, weil sie aus Zeilen und Spalten besteht. Sind die Daten in Würfelform angeordnet, handelt es sich um einen 3D-Tensor mit Zeilen, Spalten und Schichten. Der Begriff “Dimension” bezeichnet also die Struktur eines Tensors. In diesem Kurs verwenden wir den Begriff “Dimension” jedoch, um die Länge eines Vektors oder die Zeilen- und Spaltenzahl einer Matrix zu bezeichnen.