2010-04-14 9 views
10

Ich habe ein 4D Array von Messungen in MATLAB. Jede Dimension repräsentiert einen anderen Parameter für die Messung. Ich möchte den maximalen und minimalen Wert und den Index (d. H. Welchen Parameter) von jedem finden.Wie kann ich das Maximum oder Minimum einer multidimensionalen Matrix in MATLAB finden?

Was ist der beste Weg, es zu tun? Ich denke, ich kann das Maximum des Maximums in jeder Dimension nehmen, aber das scheint wie ein Klud.

+0

Obwohl die ausdrückliche Frage in dem gekennzeichneten Betrogenen beantwortet wird, antworten alle Antworten hier auf die Frage im Titel. Dies sind zwei sehr unterschiedliche Szenarien, und ich stimme dem Duplikat-Flag nicht zu. – excaza

Antwort

34

Schnell Beispiel:

%# random 4 d array with different size in each dim 
A = rand([3,3,3,5]); 

%# finds the max of A and its position, when A is viewed as a 1D array 
[max_val, position] = max(A(:)); 

%#transform the index in the 1D view to 4 indices, given the size of A 
[i,j,k,l] = ind2sub(size(A),position); 

das Minimum zu finden, wird als Übung :).

Nach einem Kommentar: Wenn Sie die Anzahl der Dimensionen des Arrays A nicht kennen und kann die „[i,j,k,l] =“ Teil daher nicht schreiben, diesen Trick verwenden:

indices = cell(1,length(size(A))); 

[indices{:}] = ind2sub(size(A),position); 
+0

Dies ist der Matlab-Weg. Wenn Sie das absolute Maximum finden wollen, benutzen Sie 'max (abs (A (:))' und multiplizieren Sie mit 'sign (A (position))' falls Sie sich für das Zeichen interessieren. – Jonas

+0

Schöne Lösung, die es macht der Matlab-Weg ohne Schleifen – martiert

+0

Kann man einen maximalen Positionsindex als Vektor bekommen, wenn man die Dimensionen von A nicht kennt, zB in einer Funktion – yuk

0

für die zweidimensionale Anordnung, sage ich können Sie einfach die Min/Max-Funktion zweimal verwenden. n-mal für ein n-dimensionales Array. zB: a=[2 3 4; 5 6 7; -2 7 87; 911 7 34];

for minimum: min(min(a,[],1)) 
      -> the answer will be -2. 

können Sie die Dimension Parameter in min/max 2 als auch setzen. Da dies die Funktion zweimal aufruft, wählen Sie das zweite Mal den minimalen/maximalen Elementvektor der Dimension aus.

In ähnlicher Weise können Sie (max(max(a,[],1)) tun, um das Maximum herauszufinden.