saber - Elemento sabio significa sobre lista de matrices
ig analytics (2)
Aquí hay una alternativa que debería ser bastante rápida, ya que estamos trabajando con funciones básicas diseñadas para trabajar con matrices. Simplemente tomamos su lista y usamos la array
para convertirla en una matriz 3D, luego usamos apply
o simplemente 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
O puede usar rowMeans que es más rápido, especificando que desea obtener la media en más de 2 dimensiones ...
# 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
Esta pregunta ya tiene una respuesta aquí:
- Media de cada elemento de una lista de matrices 2 respuestas
- Cómo sumar una lista numérica elementos 1 respuesta
Supongamos que tienes lista de matrices. ¿Cuál es la forma más conveniente de calcular la matriz media en un elemento por elemento básico? Supongamos que tenemos una lista de matrices:
> A <- matrix(c(1:9), 3, 3)
> A
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> B <- matrix(c(2:10), 3, 3)
> B
[,1] [,2] [,3]
[1,] 2 5 8
[2,] 3 6 9
[3,] 4 7 10
> my.list <- list(A, B)
Así que la salida deseada debe ser:
[,1] [,2] [,3]
[1,] 1.5 4.5 7.5
[2,] 2.5 5.5 8.5
[3,] 3.5 6.5 9.5
Puedes usar:
Reduce("+", my.list) / length(my.list)
De acuerdo con los comentarios, quiere que se implemente tanto el mean
como el sd
en una lista de matrices, y las formas anteriores no funcionarán sin problemas para el sd
. Intenta esto en su lugar:
apply(simplify2array(my.list), 1:2, mean)
apply(simplify2array(my.list), 1:2, sd)