Concatenazione matrici 3d

di il
3 risposte

Concatenazione matrici 3d

Buonasera a tutti,
vorrei sapere se è possibile concatenare matrici 3d o quale può essere una soluzione simile al concatenamento.
In pratica ho una decina di matrici 3d(relative ad immagini PET)che voglio unire in un unico vettore, o in una nuova matrice.
Il cat funziona solo se in parentesi scrivo il nome di ciascuna delle 10 matrici.
Ma se fossero 100?
Perchè non riesco a fare un ciclo funzionante?

Spero di essere stata chiara almeno un pochino!
Grazie a chi risponderà!

3 Risposte

  • Re: Concatenazione matrici 3d

    Ci sono diversi modi per concatenare in modo automatico delle matrici; molto dipende dal "nome" delle matrici.

    Nello script in calce ci sono tre esempi a seconda che:

    [1] il nome delle matrici contenga un indice progressivo (es.: m1, m2, m3, ...)
    [2] il nome delle matrici non contenga un indice progressivo, ma che l'ordine sia dato dall'ordine alfabetico dei nomi delle matrici (es.: a_mat, b_mat, c_mat, ...)
    [3] caso più generale; il nome delle matrici non contiene un indice progressivo e non si può utilizzare l'ordine alfabetico. In questo caso la sequenza di concatenazione delle matrici deve essere specificata "a mano".
    
    
    % 
    % Generazione matrici di esempio
    % 
    m1=ones(3,2);
    m2=ones(3,2)*2;
    m3=ones(3,2)*3;
    m4=ones(3,2)*4;
    % 
    % Se le matrici da concatenare hanno un nome con un indice progressivo
    % 
    M=[];
    for i=1:4
       eval(['M=[M;m' num2str(i) '];']);
    end
    % 
    % Se le matrici hanno nomi senza un relazinoe particolare (se hanno un nome
    % "qualunque"
    % 
    % 
    % Cancellare tutti i dati dal workspace (gli altri dati necessari
    % all'esecuzione del programma possono essere caricati in un secondo
    % momento
    % 
    clear all
    % 
    % Caricare nel workspace solo le matrici che si vogliono concatenare
    % 
    matrice_1=ones(3,2);
    seconda_matrice=ones(3,2)*2;
    un_altra_matrice=ones(3,2)*3;
    ultima_matrice=ones(3,2)*4;
    % 
    % Il comando "whos" restituisce l'elenco delle variabili presenti nel
    % workspace, in questo caso solo le matrici che si vogliono concatenare
    % L'elenco delle matrici da concatenare è salvato alla'interno della
    % struttura "lista_mat". In questo caso l'elenco delle matrici nella lista
    % viene creato automaticamente "in ordine alfabetico
    %
    list_mat=whos;
    % 
    % Se si vogliono concatenare le matrici in un ordine diverso da quello
    % alfabetico, si può costruire una lista delle matrici "ad hoc"
    % 
    % 
    % Numero delle matrici da concatenare
    % 
    n_mat=length(list_mat);
    % 
    % Loop per la concatenazione delle matrici; ad ogni iterazione il nome
    % della matrice da concatenare è estratto dala struttura "lisa_mat" ed
    % assegnato alla variabile stringa "nome_mat".
    % 
    M=[];
    for i=1:n_mat
       name_mat=list_mat(i).name
       eval(['M=[M;' name_mat '];'])
    end
    % 
    % Se si vogliono concatenare le matrici in un ordine diverso da quello
    % alfabetico, si può costruire una lista delle matrici "ad hoc" ad esempiio
    % usando un cell array
    % 
    n_mat=1;
    my_lista_mat{n_mat}='ultima_matrice';
    n_mat=n_mat+1;
    my_lista_mat{n_mat}='un_altra_matrice';
    n_mat=n_mat+1;
    my_lista_mat{n_mat}='matrice_1';
    n_mat=n_mat+1;
    my_lista_mat{n_mat}='seconda_matrice';
    % 
    % Loop per la concatenazione delle matrici; ad ogni iterazione il nome
    % della matrice da concatenare è estratto dala struttura "lisa_mat" ed
    % assegnato alla variabile stringa "nome_mat".
    % 
    M=[];
    for i=1:n_mat
       eval(['M=[M; ' my_lista_mat{i} ']'])
    end
    
    
    Hope this helps.
  • Re: Concatenazione matrici 3d

    E' perfetto!!
    Grazie mille
  • Re: Concatenazione matrici 3d

    Non c'è di che!
Devi accedere o registrarti per scrivere nel forum
3 risposte