Mo Logo [Home] [Lexikon] [Aufgaben] [Tests] [Kurse] [Begleitmaterial] [Hinweise] [Mitwirkende] [Publikationen]

Mathematik-Online-Kurs: MATLAB - Weitere Datentypen

Mehrdimensionale Felder


[vorangehende Seite] [nachfolgende Seite] [Gesamtverzeichnis][Seitenübersicht]

Mehrdimensionale Felder erweitern das zweidimensionale Matrixkonzept auf beliebig viele Dimensionen. So ergibt beispielsweise
  >> M=rand(3,5,2)
  M(:,:,1) =
      0.6045    0.1333    0.1673    0.1052    0.7593
      0.0358    0.8545    0.0884    0.5390    0.4092
      0.6747    0.1469    0.7105    0.6905    0.8781
  M(:,:,2) =
      0.6390    0.0185    0.1608    0.1759    0.8863
      0.3656    0.9576    0.8660    0.1181    0.4054
      0.5340    0.7469    0.2217    0.5629    0.0791

  >> whos M
    Name      Size                           Bytes  Class
    M         3x5x2                            240  double array
  Grand total is 30 elements using 240 bytes
ein $ (3\times 5\times 2)$-Feld von Pseudozufallszahlen. Anschaulich besteht dieses aus zwei hintereinandergelegten $ (3\times 5)$-Matrizen. Wie das obige Beispiel zeigt, erfolgt die Ausgabe mehrdimensionaler Felder durch Angabe der Matrizen aus den beiden ersten Dimensionen bei durchlaufenden hinteren Indizes. Mehrdimensionale Felder lassen sich auch durch Zuweisung einzelner Matrixelemente oder Teilmatrizen erzeugen. Zuvor nicht definierte Bereiche werden dabei durch Nullen aufgefüllt.

Die Indizierung von Feldelementen erfolgt analog zur Matrixindizierung durch die Angabe entsprechend vieler Indizes bzw. Indexvektoren. Die letzte Dimension bei mehrdimensionaler Felder hat stets eine Länge $ >1$. Auf mehrdimensionale Felder können Element-Operationen bzw. elementare Funktionen angewendet werden. Darüber hinaus sind eine Vielzahl von MATLAB-Funktionen für die Verarbeitung mehrdimensionaler Felder erweitert worden.

Spezielle Funktionen für die Erstellung bzw. Manipulation mehrdimensionaler Felder sind unter anderem:

 Erzeugung/Manipulation mehrdimensionaler Felder
   rand, randn Felder mit Pseudo-Zufallszahlen
   ones, zeros Felder mit den Elementen 1 bzw. 0
   reshape, permute Änderung der Gestalt bzw. Dimensionsreihenfolge
   squeeze Enfernt Dimensionen der Länge 1
 Funktionen für mehrdimensionale Felder
   size, length, ndims Größen-, Längen- und Dimensionsangaben
   sin, cos, ... Elementarfunktionen operieren elementweise
   sum, prod, diff Summen-, Produkt-, Differenzenbildung über die
     angegebene Dimension
(Autoren: Hörner/Wipper)

Mit Hilfe der folgenden Befehle wird zunächst ein $ (2\times 4\times 3)$-Feld definiert. Die Ziffern der Einträge geben dabei die zugehörigen Indizes wieder:
  >> A(:,:,1)=[111 121 131 141; 211 221 231 241];
  >> A(:,:,2)=A(:,:,1)+1;
  >> A(:,:,3)=A(:,:,1)+2
  A(:,:,1) =
     111   121   131   141
     211   221   231   241
  A(:,:,2) =
     112   122   132   142
     212   222   232   242
  A(:,:,3) =
     113   123   133   143
     213   223   233   243

Größen-, Längen und Dimensionsangaben bei mehrdimensionalen Feldern:

  >> size(A)
  ans =
       2     4     3
  >> length(A)
  ans =
       4
  >> ndims(A)
  ans =
       3
Die Ausgabe von length(A) entspricht der von max(size(A)), ndims(A) gibt die Anzahl der Dimensionen von A, also length(size(A)) zurück.

Indizierung einzelner bzw. mehrerer Elemente:

  >> A(2,4,3)
  ans =
     243
  >> A(:,1,3)
  ans =
     113
     213
  >> A(1:2,4,:)
  ans(:,:,1) =
     141
     241
  ans(:,:,2) =
     142
     242
  ans(:,:,3) =
     143
     243
Summation über eine angegebene Dimension:
  >> sum(A,3)
  ans =
     336   366   396   426
     636   666   696   726
Das Ergebnis entspricht dem von A(:,:,1)+A(:,:,2)+A(:,:,3).

Permutation der Dimensionen und Änderung der Gestalt:

  >> P=permute(A,[2 3 1])
  P(:,:,1) =
     111   112   113
     121   122   123
     131   132   133
     141   142   143
  P(:,:,2) =
     211   212   213
     221   222   223
     231   232   233
     241   242   243

  >> reshape(A,[4 6])
  ans =
     111   131   112   132   113   133
     211   231   212   232   213   233
     121   141   122   142   123   143
     221   241   222   242   223   243
Das Argument [2 3 1] des permute-Befehls bewirkt die Umordnung des Feldes A, so dass der erste, zweite bzw. dritte Index von P dem zweiten, dritten bzw. ersten Index von A entspricht, d.h. es gilt A(z,s,t)=P(s,t,z).

Der Befehl resphape mit der Größenangabe [4 6] erzeugt dagegen eine $ (4\times 6)$-Matrix, deren Elemente spaltenweise A(:) entnommen werden.

Elementzuweisung und Enfernen überflüssiger Dimensionen:

  >> clear M; M(1,10,11,2,1,1,17,4,1,1,1)=1;
  >> size(M)
  ans =
       1    10    11     2     1     1    17     4

  >> S=squeeze(M);
  >> size(S)
  ans =
      10    11     2    17     4
Die direkte Zuweisung eines Elements von M erzeugt eine Matrix entsprechender Größe und setzt alle nicht definierten Elemente 0. Man beachte, dass jene abschließenden Dimensionen automatisch entfernt werden, welche die Länge 1 haben.

Alle Dimensionen der Länge 1 können mit Hilfe des Befehls squeeze entfernt werden. Dabei bleiben die Elemente des Feldes unverändert, jedoch ist bei der Indizierung auf die reduzierte Zahl der Dimensionen zu achten.

(Autoren: Hörner/Wipper)

[vorangehende Seite] [nachfolgende Seite] [Gesamtverzeichnis][Seitenübersicht]

  automatisch erstellt am 5.2.2008