r矩阵乘积元素

时间:2012-11-24 17:57:37

标签: performance r matrix product

我有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乘1)矩阵与(1乘K_矩阵)的乘积,因此是( L由K表示,如C所示。“sum”对所得矩阵的所有元素求和)

这样做的一种方法是将网格创建为expand.grid(1:n,1:m)并为每个元素计算D(。,。)。有关如何在R中更快地完成任务的想法吗?

谢谢!

1 个答案:

答案 0 :(得分: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)