2016-07-24 12 views
2

Ich habe eine 3D Matlab Matrix der Größe 100 * 10 * 1344.Wie finde ich den Ort des maximalen Elements in einer 3D MATLAB Matrix?

Ich möchte die drei Indizes des maximalen Elements der Matrix finden.

Wenn ich es mit dem Befehl find versuchen zu finden, die ich erhalte:

>> [i j k]=find(max(A(:))==A) 
i = 
    52 
j = 
    9601 
k = 
    1 

Aber mit diesem Indizes ergibt folgendes Ergebnis:

>> A(i ,j, k) 
??? Index exceeds matrix dimensions. 

Wie das Problem lösen ??

Antwort

6

Sie können nicht find drei Indizes zurückgeben, nur zwei. Die dritte Ausgabe ist der Wert, kein Index.

Ich schlage vor, Sie erhalten einen einzigen Index, der dann eine linear index sein wird. Sie können das direkt in A verwenden oder in drei Indizes mit ind2sub konvertieren.

Beispiel:

A = rand(3,4,5); % example 2D array 
ind = find(max(A(:))==A(:)); 
A(ind) % use linear index directly into A 
[ii, jj, kk] = ind2sub(size(A), ind); % or convert to three indices... 
A(ii, jj, kk) % ...and use them into A 

Auch, wenn Sie nur das erste Auftreten des maximalen müssen (falls es mehr als eine), können Sie die zweite Ausgabe von max statt find verwenden:

A = rand(3,4,5); % example 2D array 
[~, ind] = max(A(:)); % second output of this function gives position of maximum 
A(ind) % use linear index directly into A 
[ii, jj, kk] = ind2sub(size(A), ind); % or convert to three indices... 
A(ii, jj, kk) % ...and use them into A 
+1

Vielen Dank !!! –

Verwandte Themen