我想得到两个矩阵的每个元素的组合总和。
例如, [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个元素。
我相信这可能是一种更好的方式。
答案 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