Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何求R的两个矩阵中每个元素的和_R_Matrix_Sum - Fatal编程技术网

如何求R的两个矩阵中每个元素的和

如何求R的两个矩阵中每个元素的和,r,matrix,sum,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] [

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

比如说,, [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

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

>a b排序(行和(展开.grid(a,b)))
[1]  5  7  8 10 11 12 13 15 18

这就是你要找的吗?它从每个矩阵中选取元素的所有组合,并返回其中的和

> 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
>xy
>a b
>c c c c
[1]  5  7  8 10 11 12 13 15 18

另一种选择是使用
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

我只是想用
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

x我还不能投票。。但我喜欢Andy Barbour的expand.grid方法。确实不错。不,没有必要,但顺序取决于网格扩展;因此:
rowSums(expand.grid(a,b))
给出了
[1]571128151318
正确,但我希望它是;-)谢谢你,安迪<代码>行和(expand.grid(a,b))
是许多矩阵的最佳方法。我将每个矩阵中元素的所有组合与外积乘积,并将求和结果和乘积结果合并到一个表中。所以元素的顺序对我来说很重要。谢谢你的建议!我不是英国人。@Arun,你说得对。我需要用
c
包装,我会修复缺少的
,感谢更快的解决方案,但我认为
outer
函数只适用于两个参数。
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