【问题标题】:Sum every n rows of a matrix within a list对列表中矩阵的每 n 行求和
【发布时间】:2017-11-16 22:46:06
【问题描述】:

我正在尝试创建一个矩阵,其中每一行由另一个矩阵中每三行的总和组成。实际上,列表中有一堆这样的矩阵,我对该列表中的每个元素执行相同的操作。基于这个post,我能够生成下面的代码。它可以工作,但对于我更复杂的数据集来说需要很长时间。

test<-lapply(1:1000, function(x) matrix(1:300, nrow=60))
testCons<-lapply(test, function(x) apply(x, 2, function(y) tapply(y, ceiling(seq_along(y)/3), sum)))

有人知道如何加快或简化它吗?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    rowsum 提供了一个简单的加速 - 它根据分组变量计算行的总和,分组变量是每三行的索引。

     test <- lapply(1:1000, function(x) matrix(1:300, nrow=60))
    
     system.time(
       testCons <- lapply(test, function(x) apply(x, 2, function(y) tapply(y, ceiling(seq_along(y)/3), sum)))
     )
    #   user  system elapsed 
    #  1.672   0.004   1.678 
    
     system.time(
       testCons2 <- lapply(test, function(x) rowsum(x, rep(seq_len(nrow(x) / 3), each=3)))
     )
    #   user  system elapsed 
    #   0.08    0.00    0.08 
    
     all.equal(testCons, testCons2)
    #[1] TRUE
    

    【讨论】:

      猜你喜欢
      • 2015-01-15
      • 2013-09-18
      • 2015-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多