Ordinare valori matrice Matlab

di il
4 risposte

Ordinare valori matrice Matlab

Ciao a tutti!

Ho una matrice A 8007x8007 che contiene dei valori i.

Vorrei creare un'altra matrice B con 64112049 (8007x8007) righe e 3 colonne che contenga:

prima colonna: riga della matrice A corrispondente al valore i
seconda colonna: colonna della matrice A corrispondente al valore i
terza colonna: valori i ordinati in ordine crescente.

Immagino di dover scorrere la matrice A riga per riga e poi colonna per colonna, ma sono un po' arrugginita con Matlab e mi sono persa nei cicli , qualcuno mi può aiutare?

Irenzia

4 Risposte

  • Re: Ordinare valori matrice Matlab

    La domanda non è chiara, dovresti fornire alcuni chiarimenti:
    [*] i valori "i" sono tutti diversi tra loro?
    [*] sono di tipo "integer" o "double?
    [*] se ci possono essere dei duplicati, come vanno gestiti?
    [*] se ho capito bene, nelle prime due colonne, vuoi l'indice della riga e della colonna nella quale un certo valore "i" compare. Ammesso che non ci siano duplicazioni tra i valori "i", come associ, poi il valore "i" corrispondente?
    Cerco di spiegarmi meglio (sempre che abbia capito quello che vuoi realizzare): se nella matrice A, nella locazione (3,9) c'è il valore "i" 13, nella prima colonna vorresti "3" e nella seconda colonna "9". E così?
    [*] se è così, nella nuova matrice avrai, in una certa riga avrai 3 9 x dove "x" è uno dei valori di "i" che però potrebbe non essere 13 (per restare all'esempio precedente) perchè nella terza colonna ci sono valori di "i" ordinati in modo crescente.

    Potresti, pubblicare un esempio della matrice A (possibilmente ... con un po' meno di 64 milioni di valori) e della matrice di output che ti aspetti?
  • Re: Ordinare valori matrice Matlab

    Ciao ask_raf, grazie della risposta. Rispondendo agli ultimi due [*] hai capito perfettamente! Non riesco a pubblicare uno screen perchè non sto aprendo la matrice, ma deve uscire così, secondo l'esempio che hai fatto.
    Possono esserci dei valori uguali tra gli "i", va bene se sono posti in ordine in base all'ordine di lettura (l'elemento che viene letto per primo diventa il primo in ordine crescente), ma se cambia il modo di gestire i duplicati è indifferente.
    Sono di tipo double.
  • Re: Ordinare valori matrice Matlab

    MI sembra di capire che, forse, semplicemente vuoi:
    [*] nella terza colonna i valori ordinati in modo crescente
    [*] nella prima e nella seconda, rispettivamente, gli indici della riga e della colonna nella quale i valori erano presenti

    Se così è, non sono necessari dei loop:
    
    % Creazione di una matrice di esempio
    m=randi(100,4,4)
    % Ordinamento dei valori
    [val_ord,idx]=sort(m(:))
    % Identificazione degli idici riga e colonna
    [idx_riga,idx_colonna]=ind2sub([4,4],idx)
    % Creazione della matrice di output
    m_out=[idx_riga idx_colonna val_ord]
    
    che, partendo da una matrice di esempio:
    
    m =
    
       30   88   12   95
       51   99   57   87
       31   80    7   80
       42    5   73   46
    
    genera la matrice di output:
    
    m_out =
    
        4    2    5
        3    3    7
        1    3   12
        1    1   30
        3    1   31
        4    1   42
        4    4   46
        2    1   51
        2    3   57
        4    3   73
        3    2   80
        3    4   80
        2    4   87
        1    2   88
        1    4   95
        2    2   99
    
    Fai riferimento alla documentazione per i dettagli sulle funzioni usate nello script.
  • Re: Ordinare valori matrice Matlab

    Grazie ask_raf! Ho ancora problemi per le dimensioni della matrice, ma il codice funziona perfettamente.
Devi accedere o registrarti per scrivere nel forum
4 risposte