如何计算矩阵的总和?

mas*_*nix 4 r pseudocode

我有一个大小为4 x 10的矩阵.我想计算总和的所有可能条目的总和.换句话说,如果你有一个2 x 2矩阵

2 3
4 1
Run Code Online (Sandbox Code Playgroud)

然后有2 ^ 2个和(2 + 3,2 + 1)和(4 + 3和4 + 1).类似地,如果你有一个2 x 3矩阵,则总共有2 ^ 3 = 8个总和.允许重复.由于我的矩阵是4 x 10,因此总共有1,048,576个.

我究竟如何在R中计算出来?伪代码也很好,因为我很确定我可以转换成R.但是专门的R包/函数会更好.

jos*_*ber 7

对于具有任意数量列的矩阵,实现此目的的简洁方法是:

rowSums(expand.grid(as.data.frame(m)))
Run Code Online (Sandbox Code Playgroud)

as.data.frame(m)将矩阵转换为data.frame,这意味着它可以直接传递给expand.grid函数,该函数将在每个列上运行.rowSums有效地计算结果的行总和,与使用apply函数相比,这将显着提高效率sum:

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
Run Code Online (Sandbox Code Playgroud)

编辑:正如@Roland所建议的那样,这不是特别节省内存,因为它在执行任何添加之前需要列的完整交叉产品.更难阅读但内存效率更高的版本将是:

Reduce(function(x, y) rowSums(expand.grid(x, y)), as.data.frame(m))
Run Code Online (Sandbox Code Playgroud)