如何得到R的两个矩阵中每个元素的总和

时间:2013-01-17 07:27:58

标签: r matrix sum

我想得到两个矩阵的每个元素的组合总和。

例如, [2,4,6]和[3,6,9]的组合为[5,7,12,8,10,15,11,13,18]。

我只想将结果作为

x<-rbind(c(2,4,9))
y<-rbind(c(3,6,9))
x+y[1]
     [,1] [,2] [,3]
[1,]    5   7    12
x+y[2]
     [,1] [,2] [,3]
[1,]    8   10   15
x+y[3]
     [,1] [,2] [,3]
[1,]   11   13   18

我有30个矩阵,因此元素将扩展为3 ^ 30 = 2.05891132×10 ^ 14个元素。

我相信这可能是一种更好的方式。

4 个答案:

答案 0 :(得分:2)

我以为我会使用outer抛出另一个解决方案。复制@Arun,这里有一些基准:

x <- rnorm(1000)
y <- rnorm(1000)
REP <- function() { z1 <- rep(x, length(x)) + rep(y, each=length(y)) }
GRID <- function() { z2 <- rowSums(expand.grid(x,y)) }
OUTER <- function() { z3 <- c(outer(x,y,"+")) }
require(rbenchmark)
benchmark(REP(), GRID(), OUTER(), replications = 10, order = "elapsed")

     test replications elapsed relative user.self sys.self user.child sys.child
3 OUTER()           10    0.24    1.000      0.19     0.05         NA        NA
1   REP()           10    0.31    1.292      0.21     0.10         NA        NA
2  GRID()           10    2.10    8.750      1.57     0.44         NA        NA

答案 1 :(得分:1)

正如@Arun所说,你的问题很难解释。但是,这是你的意思吗? (我猜你忘记在你的例子中包括18个。)

> a <- c(2,4,9)
> b <- c(3,6,9)
> sort(rowSums(expand.grid(a,b)))
[1]  5  7  8 10 11 12 13 15 18

答案 2 :(得分:0)

这是你在找什么?它从每个矩阵中选取一个元素的所有组合并返回sum

> x <- c(2, 4, 9)
> y <- c(3, 6, 9)
> 
> a <- rep(x,length(y))
> b <- rep(y, each=length(x))
> 
> c <- a + b
> c <- c[order(c)]
> c
[1]  5  7  8 10 11 12 13 15 18

答案 3 :(得分:0)

另一种选择是使用combn

sapply(a,function(x)combn(c(x,b),2,FUN=sum)[1:length(a)])
     [,1] [,2] [,3]
[1,]    5    7   12
[2,]    8   10   15
[3,]   11   13   18