Dati x matrici nel workspace come le posso sommare tra loro?

di il
3 risposte

Dati x matrici nel workspace come le posso sommare tra loro?

Salve a tutti.
Ho una serie x di matrici di dimensioni 330x440 presenti nel workspace di Matlab. Dovrei fare la somma di queste matrici come potrei fare per sommarle? le matrici sono definite con il nome : matrice2, matrice3, matrice4 e cosi via fino ad arrivare alla matrice9.
Grazie per l'aiuto.

3 Risposte

  • Re: Dati x matrici nel workspace come le posso sommare tra loro?

    Qual è il problema?
    Perchè non puoi scrivere semplicemente?
    
    mat_sum=matrice2 + matrice3 + matrice4 +matrice5 + matrice6 +matrice7 + matrice8 + matrice9;
    
  • Re: Dati x matrici nel workspace come le posso sommare tra loro?

    Cercavo un metodo alterativo perché poi dovrò gestire molti più dati di quelli che ho messo
  • Re: Dati x matrici nel workspace come le posso sommare tra loro?

    La cosa migliore che puoi fare è modificare la parte del codice che genera le matrici che poi vuoi sommare.
    Leggendo l'altra domanda che hai pubblicato, mi sembra, ma potrei sbagliarmi, che generi le matrici usando la funzione "eval".
    Se è così, questa è l'ennesima dimostrazione di quanto sia "rischioso" usarla: ti consente, apparentemente facilmente, di creare delle variabili in modo automatico, ma, poi, non sei in grado di gestirle (a meno di non continuare ad usare "eval").

    Se, come hai scritto, sono matrici (M x N), potresti creare una matrice (M x N x P) avresti, così, "P" matrici (M x N) in unica matrice che puoi successivamente sommare.
    
    % Creazione della matrice a 3 Dimensioni
    M(:,:,1)=randi(10,2,3)
    M(:,:,2)=randi(10,2,3)
    M(:,:,3)=randi(10,2,3)
    M(:,:,4)=randi(10,2,3)
    % Somma delle matrici
    MM=sum(M,3)
    
    Un'altra possibilità, appena un po' più complicata, potrebbe essere creare una assegnare le varie matrici, quando vengono create ad una struttura.
    Il vantaggio delle strutture in MatLab è che puoi definire i nomi dei suoi campi in modo "automatico" (quasi come faresti con "eval") e che esiste, tra le altre, una funzione che ti restituisce i nomi dei campi.
    
    % Creazione di delle matrici e loro assenazione ai campi di una matrice
    for i=1:4
       str_mat.(['m_' num2str(i)])=randi(10,2,3)
    end
    % Identrificazione dei nomi dei campi della struttura
    mat_names=fieldnames(str_mat)
    % Loop per la somma delle varie matrici
    s=0
    for i=1:length(mat_names)
       s=s+str_mat.(mat_names{i})
    end
    
Devi accedere o registrarti per scrivere nel forum
3 risposte