2013-10-07 25 views
23

Matrisler listeniz olduğunu varsayalım. Bir eleman üzerindeki ortalama matrisi eleman temeline göre hesaplamanın en uygun yolu nedir? biz matrisleri bir listesi var varsayalım:Öğe listesi ortalama matrisler listesinde

> 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) 

Yani istenilen çıkışı olmalıdır:

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

Yapmaya çalıştığınız şey hakkında biraz ipucu verebilir misiniz? Böyle bir durumda, '(A + B)/2' cevabınızı alır, ama sanırım başka bir şey arıyorsunuz .... – A5C1D2H2I1M1N2O1R2T1

+0

Evet, haklısınız. 'Mean()' ve 'sd()' yi uygulaman gerek. – Andrej

+1

Bu yazının başlığı, yinelenen yanıtlarla karşılaştırıldığında çok açıklayıcı olduğundan, daha önce yazılmıştır. – Megatron

cevap

48

Sen kullanabilirsiniz:

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

yorumlarına göre, istediğiniz her ikisi mean ve sd matrisler listesinde uygulandı ve yukarıdaki yollar sd için sorunsuzca çalışmayacak. Bunu deneyin:

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

Matrislerle çalışmak üzere tasarlanan temel işlevlerle çalıştığımız için oldukça hızlı olması gereken bir alternatif. Biz sadece 2 üzerinde ortalamasını almak istiyorum belirterek, listenizi alıp ya apply ya da sadece rowMeans kullanmak sonra 3D diziye çevirmek için array kullanın ...

# 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 

Yoksa hızlıdır hangi rowMeans kullanabilirsiniz boyutlar ...

# 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