Media degli elementi rispetto all’elenco delle matrici

Supponiamo di avere una lista di matrici. Qual è il modo più conveniente per calcolare la matrice media su un elemento per elemento di base? Supponiamo di avere una lista di matrici:

> A  A [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 > B  B [,1] [,2] [,3] [1,] 2 5 8 [2,] 3 6 9 [3,] 4 7 10 > my.list <- list(A, B) 

Quindi l’output desiderato dovrebbe essere:

  [,1] [,2] [,3] [1,] 1.5 4.5 7.5 [2,] 2.5 5.5 8.5 [3,] 3.5 6.5 9.5 

Puoi usare:

 Reduce("+", my.list) / length(my.list) 

In base ai commenti, si desidera che sia la mean che la sd implementate in un elenco di matrici e che i metodi sopra descritti non funzionino correttamente per sd . Prova questo invece:

 apply(simplify2array(my.list), 1:2, mean) apply(simplify2array(my.list), 1:2, sd) 

Ecco un’alternativa che dovrebbe essere abbastanza veloce poiché stiamo lavorando con le funzioni di base progettate per funzionare con le matrici. Prendiamo la tua lista e usiamo la array per trasformarla in un array 3D, quindi usa apply o solo rowMeans

 # Make some data, a list of 3 matrices of 4x4 ll <- replicate( 3 , matrix( sample(5,16,repl=TRUE) , 4 ) , simplify = FALSE ) # Make a 3D array from list of matrices arr <- array( unlist(ll) , c(4,4,3) ) # Get mean of third dimension apply( arr , 1:2 , mean ) # [,1] [,2] [,3] [,4] #[1,] 3.000000 3.666667 3.000000 1.666667 #[2,] 2.666667 3.666667 3.333333 3.666667 #[3,] 4.666667 2.000000 1.666667 3.666667 #[4,] 1.333333 4.333333 3.666667 3.000000 

Oppure puoi usare rowMeans che è più veloce, specificando che vuoi ottenere la media su 2 dimensioni ...

 # Get mean of third dimension rowMeans( arr , dims = 2 ) # [,1] [,2] [,3] [,4] #[1,] 3.000000 3.666667 3.000000 1.666667 #[2,] 2.666667 3.666667 3.333333 3.666667 #[3,] 4.666667 2.000000 1.666667 3.666667 #[4,] 1.333333 4.333333 3.666667 3.000000