求和R中的矩阵列表

Ada*_*344 3 r matrix

我有一个不同大小的矩阵列表.如何快速总结矩阵列表中的所有元素?

这是我目前的代码,但速度很慢.有更快的方法吗?

  for (i in 1: length(w)) {
    w_sum <- w_sum + sum(apply(w[[i]], 1:2, function (x) x^2))
  }
Run Code Online (Sandbox Code Playgroud)

the*_*ail 7

矩阵只是引擎盖下的矢量,因此你可以unlist,方形和sum:

sum(unlist(w)^2)
#[1] 2393
Run Code Online (Sandbox Code Playgroud)

使用@ akrun的示例数据会得到相同的结果.

如果你有大量的矩阵,它会快得多:

w <- rep(list(matrix(1:24,nrow=6)), 1e6)
system.time(sum(unlist(w)^2))
# user  system elapsed 
# 0.11    0.00    0.10 

system.time(sum(vapply(w, function(x) sum(x^2), numeric(1))))
# user  system elapsed 
# 2.17    0.00    2.17 
Run Code Online (Sandbox Code Playgroud)

在这种情况下,循环也不必非常缓慢:

w_sum <- 0
system.time(for(i in seq_along(w)) { w_sum <- w_sum + sum(w[[i]]^2) } )
# user  system elapsed 
# 2.62    0.00    2.62 
Run Code Online (Sandbox Code Playgroud)