Posizione elemento in una matrice

di il
1 risposte

Posizione elemento in una matrice

Buongiorno,

mettiamo che io abbia una grande matrice A, e che tramite il comando max(A) riesca a trovare il massimo valore contenuto in questa matrice.
Il mio problema è quello di ricavare la posizione di questo valore all'interno della matrice, ovvero trovare gli indici (i,j) che determinano la posizione nella matrice a partire dal valore noto.

Grazie per l'aiuto

1 Risposte

  • Re: Posizione elemento in una matrice

    Per come hai scritto nella domanda:
    max(A) 
    restituisce un vettore con il valori massimi i ogni colonna e non i valore massimo tra tutti gli elementi della matrice.

    Per trovare il valore massimo all'interno di una matrice e gli indici (riga, colonna) della sua posizione all'interno della matrice puoi fare così:
    
    % Creazione di una matrice di porva
    A=randi(100,5,5)
    % Identificazione del valore massimo
    [max_val,pos_idx]=max(A(:))
    % Identificazione degli indici (riga,colonna) del valore massimo
    [row_idx,col_idx]=ind2sub(size(A),pos_idx)
    
    L'istruzione:
    
    % Identificazione del valore massimo
    [max_val,pos_idx]=max(A(:))
    
    ritorna in "max_val" il valore massimo tra tutti gli elementi della matrice ed in "pos_idx" l'indice-posizione del valore massimo.
    La notazione "A(:)" concatena in successione le colonne della matrice a costituire un unico vettore colonna.
    In questo modo la funzione "max", operando di default sulle colonne, ritorna un unico valore, cioè il valore massimo tra tutti gli elementi della matrice.
    Dal momento che con la notazione "A(:)" abbiamo "trasformato" la matrice in un vettore colonna, la posizione del valore massimo (ritornata in "pos_idx") corrisponde alla riga del vettore colonna e non alla posizione del valore massimo all'interno della matrice, quindi c'è bisogno di un ulteriore passaggio.

    L'istruzione:
    
    % Identificazione degli indici (riga,colonna) del valore massimo
    [row_idx,col_idx]=ind2sub(size(A),pos_idx)
    
    consente, tramite la funzione "ind2sub", di calcolare gli indici "riga" e "colonna" a partire dall'indice colonna.

    In conclusione:
    [max_val,pos_idx]=max(A(:))
    % Identificazione degli indici (riga,colonna) del valore massimo
    [row_idx,col_idx]=ind2sub(size(A),pos_idx)
    
    max_val ==> valore massimo all'interno della matrice A
    row_idx ==> riga
    col_idx ==> colonna

    quindi il valore max_val si trova in A(row_idx,col_idx)

    Hope this helps.
    Qapla'
Devi accedere o registrarti per scrivere nel forum
1 risposte