1

私は3つの行列を持っています:

 A (n by K), 

 B (L by m) and 

 C (L by K) 

4番目のマトリックスを作成したい

D (n by m) 

エレメント付き

D(i,j) = sum(B[,i,drop=FALSE]%*%A[j,,drop=FALSE] * C)

(B[,i,drop=FALSE]%*%A[j,,drop=FALSE] は (L by 1) 行列と (1 by K_ 行列の積であり、したがって (L by K) )、C のように。"sum" は、結果の行列のすべての要素を合計します)

これを行う 1 つの方法は、グリッドを expand.grid(1:n,1:m) として作成し、これらの要素ごとに D(.,.) を計算することです。Rでそれをより速く行う方法のアイデアはありますか?

ありがとう!

4

1 に答える 1

1
library(reshape2)
library(plyr)  
m <- 100;n <- 100;K <- 100;L <- 100
A <- matrix(sample(1:n),nrow=n,ncol=K)
B <- matrix(sample(1:L),nrow=L,ncol=m)
C <- matrix(sample(1:L),nrow=L,ncol=K)

h <- ddply(expand.grid(1:m,1:n),.(Var1,Var2),
           f <- function(i) {sum(B[,i$Var1,drop=FALSE]%*%A[i$Var2,,drop=FALSE]*C)})
D <- acast(h, Var2 ~ Var1)
于 2012-11-25T01:15:17.377 に答える