Sommare elementi di una matrice (N,2)

di il
2 risposte

Sommare elementi di una matrice (N,2)

Salve, premetto che sono un nuovo utente e ho iniziato ad utilizzare Matlab da poco.
Ho bisogno di un consiglio: ho una matrice A, costituita da N righe e 2 colonne. La prima colonna è costituito da numeri interi disposti in ordine crescente; la seconda colonna contiene valori numerici decimali:
1	0.39
2	1.08
10	9.78
13	0.65
14	1.75
15	16.63
15	6.91
16	0.28
16	5.05
....   ....
Il mio dubbio è come sommare i valori della seconda colonna, aventi gli stessi elementi della prima colonna.
Per esempio: 16.63 + 6.91 (hanno in comune l'elemento 15); 0.28 + 5.05 (hanno in comune il 16); ecc.

Per fare ciò, ho costruito una nuova matrice B (M,2), dove nella prima colonna ho riportato gli stessi valori della prima colonna della matrice A presi però una sola volta (ho eseguito il comando unique(A(:,1))); mentre per determinare i valori della seconda colonna, ho proceduto in questo modo:
for x = 1:n
    for y = 1:m
        if B(y,1) == A(x,1)
            B(y,2) = sum(A(x,2));
            
        end
    end
end
Però non ho avuto risultati sperati.

2 Risposte

  • Re: Sommare elementi di una matrice (N,2)

    Ottima idea quella di usare la funzione "unique" per trovare gli elementi della prima colonna.

    Per la somma basta un solo ciclo for:
    [*] puoi inizializzare la matrice di output in mode che nella prima colonna abbia i valori "unici" della prima colonna della matrice di input
    [*] per ogni valore "unico", gli elementi da sommare sono, come da definizione del problema, quelli che hanno lo stesso valore nella colonna 1; li puoi trovare usando l'operatore "=="
    
    % Find the unique elements of the first column of the input matrix
    idx=unique(M(:,1))
    n_idx=length(idx)
    % Initalize the output matrix
    S=[idx nan(n_idx,1)]
    % Loop over the input matrix
    for i=1:length(idx)
        S(i,2)=sum(M(M(:,1) == idx(i),2));
    end
    S
  • Re: Sommare elementi di una matrice (N,2)

    Perfetto, funziona. Non avevo pensato a questa soluzione, ancora ho molto da imparare. La ringrazio per il suo aiuto.
Devi accedere o registrarti per scrivere nel forum
2 risposte