2

2つの行列の各要素の組み合わせの合計を取得したい.

たとえば、[ 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

4 に答える 4

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
于 2013-01-17T15:24:01.380 に答える
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
于 2013-01-17T07:44:01.083 に答える
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
于 2013-01-17T08:50:30.353 に答える
0

これはあなたが探しているものですか?各マトリックスから要素のすべての組み合わせを選択し、そこに合計を返します

> 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
于 2013-01-17T07:46:05.890 に答える