, , , , for, . ( for ). rowSums :
set.seed( 35471 )
x<-matrix(rnorm(60),20,3)
y<-matrix(rnorm(300),100,3)
rs <- function( x , y ){
rows <- expand.grid( 1:nrow(x) , 1:nrow(y) )
results <- matrix( rowSums( x[ rows[,1] , ] * y[ rows[,2] , ] ) , nrow(x) , nrow(y) )
return(results)
}
flp <- function(x ,y){
results<-matrix(NA,nrow(x),nrow(y))
for (i in 1:nrow(x)){
for (j in 1:nrow(y)){
r1<-x[i,]
r2<-y[j,]
results[i,j]<-sum(r1*r2)
}
}
return(results)
}
library(microbenchmark)
microbenchmark( rs( x, y ) , flp( x ,y ) , times = 100L )
flp(x,y)[1:3,1:3]
rs(x,y)[1:3,1:3]
, , rowSums 20 , for, 2000. , .
.