【问题标题】:summing matrices to a single matrix in R将矩阵求和到 R 中的单个矩阵
【发布时间】:2014-07-21 23:57:16
【问题描述】:

我有以下矩阵:-

alive <- array(0,c(num_samples,num_time_periods,num_groups))
alive[,1,] <- 100  
for(i in 2:num_time_periods){
    alive[,i,] <- rbinom(num_samples, alive[,i-1,], exp(-delta[,i,]))}
alive

  , , 1

       [,1] [,2] [,3] [,4] [,5]
 [1,]  100   98   94   89   87
 [2,]  100   98   96   94   92
 [3,]  100   99   95   94   92

  , , 2

       [,1] [,2] [,3] [,4] [,5]
 [1,]  100   98   94   89   87
 [2,]  100   98   96   94   92
 [3,]  100   99   95   94   92

 , , 3

       [,1] [,2] [,3] [,4] [,5]
 [1,]  100   98   94   89   87
 [2,]  100   98   96   94   92
 [3,]  100   99   95   94   92

我如何对所有的矩阵元素求和,以便它给我一个矩阵?

我试过这样写:-

 Totalalive <- array(0,c(num_samples,num_time_periods,num_groups))
    for(i in 2:num_groups){
 Totalalive[,,i] <- sum(alive[,,i]) 
  }

但这是错误的。 我希望它是一个像下面这样的矩阵:-

总和:-

       [,1] [,2] [,3] [,4] [,5]
 [1,]  300   294  ..   ..   ..
 [2,]  300   294  ..   ..   ..
 [3,]  300   297  ..   ..   ..

【问题讨论】:

  • 把它们像向量一样加起来(res

标签: r matrix


【解决方案1】:

您可以使用 apply 在前两个维度上进行合并。

所以如果你有你的 3x5x3 数组 mm

mm<-structure(c(0, 0, 0, 4721.565, 4721.565, 4721.565, 4244.95, 4288.055, 
4158.742, 3834.17, 3755.25, 3677.222, 3390.485, 3355.014, 3319.538, 
0, 0, 0, 4310.424, 4310.424, 4310.424, 3873.18, 3912.528, 3794.482, 
3498.017, 3425.959, 3354.792, 3092.831, 3060.493, 3028.149, 0, 
0, 0, 3934.859, 3934.859, 3934.859, 3533.586, 3569.504, 3461.75, 
3190.963, 3125.172, 3060.271, 2820.944, 2791.468, 2761.986), .Dim = c(3L, 
5L, 3L))

然后

apply(mm, c(1,2), sum)

会回来

     [,1]     [,2]     [,3]     [,4]     [,5]
[1,]    0 12966.85 11651.72 10523.15 9304.260
[2,]    0 12966.85 11770.09 10306.38 9206.975
[3,]    0 12966.85 11414.97 10092.28 9109.673

【讨论】:

  • 另外,rowSums(mm, dims = 2)
  • @alexis_laz 是否需要为 mm 逐一键入
  • 如果我有 10 个矩阵怎么办?我如何将所有这些相加成为一个矩阵?
  • @user3680646 我在上面发布的结构是我推断您的对象给出了您发布的输出。上面的输出是一个矩阵的dput。您在上面粘贴的输出不容易复制到 R 中。那么您有 3x5x10 数组吗?或者你有 10 个独立的矩阵?
  • my.matrices &lt;- list(mm[,,1], mm[,,2], mm[,,3]) ; Reduce('+', my.matrices);
猜你喜欢
  • 2021-12-11
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 1970-01-01
  • 2021-07-31
相关资源
最近更新 更多