2017-05-22 5 views
0

Ich habe ein 5-dimensionales Array von Zahlen. Ziel ist es, Maximalwerte entlang der 5. Dimension und deren Koordinaten zu finden. Ich benutzeKoordinaten des dimensionsweisen Maximums des Matlab-Arrays

[x,y] = max(A,[],5); 

Idealer erwarte ich, dass x == A(y), aber dies scheint nicht zu passieren. Ich brauche eine Idee, wie man y in ein Koordinatenfeld z so übersetzt, dass x == A(z). Die Verwendung von find + loops ist in meinem Fall teuer, da Matrizen sehr groß sind.

Antwort

0

Angenommen, Ihre Matrix A hat die Dimension (m,n,o). Jetzt haben Sie die Indizes der maximalen Einträge entlang der 3rd Dimension in y und die entsprechenden maximalen Werte in x. Sie können auf die Maximalwerte mit dem folgenden Code zugreifen:

z = (1:m*n)' + (y(:)-1)*(m*n); % linear index of these locations in full array 
final_matrix = reshape(A(z),m,n); 

Es kann problemlos auf 5-dimensionale Matrizen erweitert werden.

Versuchen Sie den Code für die 5-dimensional-

[x,y] = max(A,[], 5); 
z = (1:m*n*o*p)' + (y(:)-1)*(m*n*o*p); 
final_matrix = reshape(A(z),m,n,o,p); 
0
s = size(A); 
[v,ii] = max(reshape(A,[],s(3))); 
[i1 j1 ] = ind2sub(s(1:2),ii); 
out = [v;i1;j1;1:s(3)]'; 
Verwandte Themen