r - 对 R 中的矩阵列表求和

标签 r matrix

我有一个不同大小的矩阵列表。如何快速求和矩阵列表中的所有元素?

这是我当前的代码,但速度很慢。有没有更快的方法?

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

最佳答案

矩阵只是引擎盖下的向量,因此您可以unlist、平方和sum:

sum(unlist(w)^2)
#[1] 2393

使用@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 

相比之下,在这种情况下循环也不必慢得离谱:

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 

关于r - 对 R 中的矩阵列表求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32389567/

相关文章:

替换数据上的字符

R 聚合并处理缺失的组合

r - 合并两个图并在 R igraph 中添加边权重

MATLAB 连接维度不等的矩阵

c++ - vector<vector<double>> 是制作矩阵类的好方法吗?

javascript - 如何从转换后的楼层 map 中正确计算坐标?

r - 合并命名向量列表而不破坏名称

jquery - 为什么 JQuery 不影响 RMarkdown 中的表?

arrays - 如何在不使用 for 循环的情况下引用列索引向量更改矩阵的元素?

c++ - SVM 训练矩阵每行的长度