2010-04-14 11 views
10

J'ai une matrice de mesures 4D dans MATLAB. Chaque dimension représente un paramètre différent pour la mesure. Je veux trouver la valeur maximale et minimale et l'indice (c.-à-d. Quel paramètre) de chacun.Comment puis-je trouver le maximum ou le minimum d'une matrice multidimensionnelle dans MATLAB?

Quelle est la meilleure façon de le faire? Je pense que je peux prendre le maximum du max du max dans chaque dimension, mais cela ressemble à un kludge.

+0

Bien que la réponse à la question explicite soit celle de la dupe, toutes les réponses répondent à la question dans le titre. Ce sont deux scénarios très distincts et je ne suis pas d'accord avec le drapeau en double. – excaza

Répondre

34

Exemple rapide:

%# 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); 

Trouver le minimum est laissé comme un exercice :).

Suite à un commentaire: Si vous ne connaissez pas le nombre de dimensions de votre tableau A et ne peut donc écrire la partie « [i,j,k,l] = », utilisez cette astuce:

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

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

C'est la façon Matlab. Si vous voulez trouver le maximum absolu, utilisez 'max (abs (A (:))' et multipliez par 'signe (A (position))' dans le cas où le signe vous intéresse – Jonas

+0

Belle solution qui le fait la méthode Matlab sans aucune boucle – martiert

+0

Pouvez-vous obtenir un index de position max en tant que vecteur si vous ne connaissez pas les dimensions de A? Dans une fonction, par exemple – yuk

0

pour tableau à deux dimensions, dire que je vous pouvez simplement utiliser la fonction min/max deux fois. n fois pour un tableau de dimension n. par exemple: a=[2 3 4; 5 6 7; -2 7 87; 911 7 34];

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

vous pouvez mettre le paramètre de dimension min/max à 2 ainsi. comme cela appelle la fonction deux fois, la deuxième fois sur le vecteur d'élément minimum/maximum de la dimension que vous choisissez. De même, vous pouvez faire (max(max(a,[],1)) pour connaître le maximum.

Questions connexes