1

我有3个矩阵:

 A (n by K), 

 B (L by m) and 

 C (L by K) 

并想产生第四个矩阵

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 中更快地做到这一点的任何想法?

谢谢!

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 回答