【问题标题】:Element-wise mean over list of matrices [duplicate]矩阵列表的元素平均值[重复]
【发布时间】:2013-10-07 06:40:05
【问题描述】:

假设您有矩阵列表。逐个元素基本计算平均矩阵的最方便方法是什么?假设我们有一个矩阵列表:

> 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

【问题讨论】:

  • 你能提供一些关于你想要做什么的线索吗?在这种情况下,(A + B)/2 会为您提供答案,但我猜您正在寻找其他东西......
  • 是的,你是对的。我需要申请mean()sd()
  • 投了赞成票,因为与重复的答案相比,这篇文章的标题非常具有描述性。

标签: r


【解决方案1】:

你可以使用:

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

根据 cmets,您希望在矩阵列表上同时实现 meansd,而上述方法对于 sd 将无法顺利运行。试试这个:

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

【讨论】:

    【解决方案2】:

    这是一个替代方案,应该很快,因为我们正在使用设计用于处理矩阵的基本函数。我们只需获取您的列表并使用 array 将其转换为 3D 数组,然后使用 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
    

    【讨论】:

    • 适用于 RowMeans,但不适用于 RowMedians...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多