R 如何计算矩阵的和?
我有一个4 x 10的矩阵。我想计算所有可能的总和。换句话说,如果你有一个2x2的矩阵R 如何计算矩阵的和?,r,pseudocode,R,Pseudocode,我有一个4 x 10的矩阵。我想计算所有可能的总和。换句话说,如果你有一个2x2的矩阵 2 3 4 1 然后是2^2和(2+3,2+1)和(4+3,4+1)。类似地,如果你有一个2 x 3的矩阵,那么总共有2^3=8个和。允许重复。因为我的矩阵是4x10,所以总数是1048576 在R中,我该如何精确地计算它?伪代码也不错,因为我相当确定我可以翻译成R。但是专门的R包/函数会更好 这个怎么样 m <- matrix(c(2,3,4,1), ncol = 2, byrow = T) app
2 3
4 1
然后是2^2和(2+3,2+1)和(4+3,4+1)。类似地,如果你有一个2 x 3的矩阵,那么总共有2^3=8个和。允许重复。因为我的矩阵是4x10,所以总数是1048576
在R中,我该如何精确地计算它?伪代码也不错,因为我相当确定我可以翻译成R。但是专门的R包/函数会更好 这个怎么样
m <- matrix(c(2,3,4,1), ncol = 2, byrow = T)
apply(expand.grid(m[,2],m[,1]),1,sum)
[1] 5 3 7 5
m对于具有任意列数的矩阵,实现这一点的简洁方法是:
rowSums(expand.grid(as.data.frame(m)))
as.data.frame(m)
将矩阵转换为data.frame,这意味着它可以直接传递给expand.grid
函数,该函数将对每列进行操作rowSums
有效地计算结果的行和,与使用函数sum
的apply
相比,这将显著提高效率:
m <- matrix(1:40, nrow=4)
system.time(apply(expand.grid(m[,1],m[,2],m[,3],m[,4],m[,5],m[,6],m[,7],m[,8],m[,9],m[,10]),1,sum))
# user system elapsed
# 4.866 0.108 4.971
system.time(rowSums(expand.grid(as.data.frame(m))))
# user system elapsed
# 0.141 0.030 0.171
这是一个非常好的解决方案。我不得不添加m[,3],m[,4]
到展开.grid
但需要大约6秒的时间才能计算出来!
Reduce(function(x, y) rowSums(expand.grid(x, y)), as.data.frame(m))