2013-10-07 68 views
23

假設您有矩陣列表。按元素基本計算元素上平均值矩陣的最方便方法是什麼?假設我們有矩陣列表:基於矩陣列表的元素方式

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

因此所需的輸出應該是:

 [,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

你可以給你一些線索,你想要做什麼?在這樣的情況下,「(A + B)/ 2」會給你答案,但我猜你正在尋找別的東西...... – A5C1D2H2I1M1N2O1R2T1

+0

是的,你是對的。我需要應用'mean()'和'sd()'。 – Andrej

+1

Upvoted,因爲與重複答案相比,此帖的標題非常具有描述性。 – Megatron

回答

48

您可以使用:

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

根據意見,你想同時meansd在一個矩陣列表上實現,上述方法對於sd將無法​​順利運行。試試這個:

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

這是一個替代方案,應該是非常快的,因爲我們正在設計與矩陣一起工作的基本函數。我們只是把你的列表,並使用array把它變成一個三維數組,那麼既可以使用apply或只是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 

或者你可以使用rowMeans這是更快,指定你想獲得超過2平均值尺寸...

# 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