Hauptinhalt

Mehrdimensionale Arrays

Ein mehrdimensionales Array in MATLAB® ist ein Array mit mehr als zwei Dimensionen. In einer Matrix werden die zwei Dimensionen durch Zeilen und Spalten dargestellt.

4-by-4 matrix

Jedes Element wird durch zwei Indexzeichen definiert: Zeilenindex und Spaltenindex. Mehrdimensionale Arrays sind eine Erweiterung von 2D-Matrizen. Bei ihnen werden zusätzliche Indexzeichen für die Indizierung verwendet. Ein 3D-Array verwendet zum Beispiel drei Indexzeichen. Die ersten zwei Indexzeichen entsprechen denen bei einer Matrix. Die dritte Dimension stellt jedoch Seiten oder Blätter mit Elementen dar.

4-by-4-by-3 array, where three 4-by-4 matrices appear stacked as pages in the third dimension

Erstellen von mehrdimensionalen Arrays

Ein mehrdimensionales Array können Sie erstellen, indem Sie zuerst eine 2D-Matrix erstellen und diese dann erweitern. Zum Beispiel können Sie zuerst eine 3x3-Matrix als erste Seite in einem 3D-Array definieren.

A = [1 2 3; 4 5 6; 7 8 9]
A = 3×3

     1     2     3
     4     5     6
     7     8     9

Danach fügen Sie eine zweite Seite hinzu. Dazu weisen Sie eine andere 3x3-Matrix dem Indexwert 2 in der dritten Dimension zu. Die Syntax A(:,:,2) verwendet einen Doppelpunkt in der ersten und der zweiten Dimension, um alle Zeilen und alle Spalten von der rechten Seite der Zuweisung einzubeziehen.

A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
A = 
A(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


A(:,:,2) =

    10    11    12
    13    14    15
    16    17    18

Die Funktion cat kann als Tool zum Erstellen von mehrdimensionalen Arrays hilfreich sein. Zum Beispiel können Sie das neue 3D-Array B durch Verknüpfung von A mit einer dritten Seite erstellen. Das erste Argument gibt an, entlang welcher Dimension verknüpft werden soll.

B = cat(3,A,[3 2 1; 0 9 8; 5 3 7])
B = 
B(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


B(:,:,2) =

    10    11    12
    13    14    15
    16    17    18


B(:,:,3) =

     3     2     1
     0     9     8
     5     3     7

Eine weitere Möglichkeit zum Erweitern eines mehrdimensionalen Arrays besteht im Zuweisen eines einzelnen Elements zu einer ganzen Seite. Zum Beispiel können Sie B um eine vierte Seite, die ausschließlich Nullen enthält, erweitern.

B(:,:,4) = 0
B = 
B(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


B(:,:,2) =

    10    11    12
    13    14    15
    16    17    18


B(:,:,3) =

     3     2     1
     0     9     8
     5     3     7


B(:,:,4) =

     0     0     0
     0     0     0
     0     0     0

Zugreifen auf Elemente

Um auf Elemente in einem mehrdimensionalen Array zuzugreifen, verwenden Sie ganzzahlige Indexzeichen, so wie Sie es von Vektoren und Matrizen kennen. Suchen Sie zum Beispiel das Element 1,2,2 von A. Es befindet sich in der ersten Zeile in der zweiten Spalte auf der zweiten Seite von A.

A
A = 
A(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


A(:,:,2) =

    10    11    12
    13    14    15
    16    17    18

elA = A(1,2,2)
elA = 
11

Verwenden Sie den Indexvektor [1 3] in der zweiten Dimension, um nur auf die erste und die letzte Spalte jeder Seite von A zuzugreifen.

C = A(:,[1 3],:)
C = 
C(:,:,1) =

     1     3
     4     6
     7     9


C(:,:,2) =

    10    12
    13    15
    16    18

Um die zweite und die dritte Zeile einer Seite zu finden, verwenden Sie den Doppelpunkt-Operator, um Ihren Indexvektor zu erstellen.

D = A(2:3,:,:)
D = 
D(:,:,1) =

     4     5     6
     7     8     9


D(:,:,2) =

    13    14    15
    16    17    18

Bearbeiten von Arrays

Elemente von mehrdimensionalen Arrays können wie bei Vektoren und Matrizen auf verschiedenste Weise verschoben werden. reshape, permute und squeeze sind nützliche Funktionen zum Neuanordnen von Elementen. Betrachten wir ein 3D-Array mit zwei Seiten.

3-by-5-by-2 array

Das Umformen eines mehrdimensionalen Arrays kann beim Ausführen bestimmter Operationen oder beim Visualisieren der Daten hilfreich sein. Verwenden Sie die Funktion reshape, um die Elemente des 3D-Arrays in Form einer 6x5-Matrix neu anzuordnen.

A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2];
A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3];
B = reshape(A,[6 5])
B = 6×5

     1     3     5     7     5
     9     6     7     5     5
     8     5     2     9     3
     2     4     9     8     2
     0     3     3     8     1
     1     0     6     4     3

reshape geht spaltenweise vor, um die neue Matrix zu erstellen. Dabei werden beginnend mit der ersten Seite absteigend aufeinanderfolgende Elemente in jeder Spalte von A verschoben. Anschließend wird der Vorgang mit der zweiten Seite fortgesetzt.

Zum Umsortieren der Reihenfolge der Dimensionen eines Arrays werden Permutationen verwendet. Betrachten wir das 3D-Array M.

M(:,:,1) = [1 2 3; 4 5 6; 7 8 9];
M(:,:,2) = [0 5 4; 2 7 6; 9 3 1]
M = 
M(:,:,1) =

     1     2     3
     4     5     6
     7     8     9


M(:,:,2) =

     0     5     4
     2     7     6
     9     3     1

Verwenden Sie die Funktion permute, um die Indexzeichen für Zeilen und Spalten auf jeder Seite zu vertauschen, indem Sie die Reihenfolge der Dimensionen im zweiten Argument angeben. Die ursprünglichen Zeilen von M sind jetzt Spalten, und die Spalten sind jetzt Zeilen.

P1 = permute(M,[2 1 3])
P1 = 
P1(:,:,1) =

     1     4     7
     2     5     8
     3     6     9


P1(:,:,2) =

     0     2     9
     5     7     3
     4     6     1

Analog können Sie die Indexzeichen für Zeilen und Seiten von M vertauschen.

P2 = permute(M,[3 2 1])
P2 = 
P2(:,:,1) =

     1     2     3
     0     5     4


P2(:,:,2) =

     4     5     6
     2     7     6


P2(:,:,3) =

     7     8     9
     9     3     1

Bei der Arbeit mit mehrdimensionalen Arrays kann es durchaus vorkommen, dass Sie ein Array vorfinden, das eine unnötige Dimension der Länge 1 hat. Die Funktion squeeze führt eine andere Form der Bearbeitung aus, bei der Dimensionen der Länge 1 eliminiert werden. Zum Beispiel können Sie die Funktion repmat verwenden, um ein 2x3x1x4-Array zu erstellen, dessen Elemente jeweils 5 sind und dessen dritte Dimension die Länge 1 hat.

A = repmat(5,[2 3 1 4])
A = 
A(:,:,1,1) =

     5     5     5
     5     5     5


A(:,:,1,2) =

     5     5     5
     5     5     5


A(:,:,1,3) =

     5     5     5
     5     5     5


A(:,:,1,4) =

     5     5     5
     5     5     5

szA = size(A)
szA = 1×4

     2     3     1     4

numdimsA = ndims(A)
numdimsA = 
4

Verwenden Sie die Funktion squeeze, um die dritte Dimension zu entfernen, sodass ein 3D-Array entsteht.

B = squeeze(A)
B = 
B(:,:,1) =

     5     5     5
     5     5     5


B(:,:,2) =

     5     5     5
     5     5     5


B(:,:,3) =

     5     5     5
     5     5     5


B(:,:,4) =

     5     5     5
     5     5     5

szB = size(B)
szB = 1×3

     2     3     4

numdimsB = ndims(B)
numdimsB = 
3

Siehe auch

Themen