2016-03-18 6 views
1

Для матриц Бета и x1, я пытаюсь применить re.fn, чтобы найти максимум для (colSums (Beta * b))^2. Здесь b - столбец матрицы x1. Интересно, как я могу сделать этот алгоритм быстрее.Применение функции на двух матрицах

set.seed(1) 
D=10000 
M=1000; N=1000 

Beta=matrix(rnorm(N*D),ncol=D) 
x1=matrix(rnorm(N*M),N) 

re.fn <- function(b) { 
    sum1 <- colSums(Beta*b) 
    T_nc1 <- sum1^2 
    T_nc <- max(T_nc1) 
    return(T_nc) 
} 
T_nc=apply(x1,2,re.fn) 
+0

Great catch.Thanks. Я редактировал свой код, теперь Beta и b имеют одинаковое количество строк. – Sue

ответ

3

Использование crossprod должна быть значительно быстрее

T_nc2 <- apply(crossprod(Beta,x1)^2,2,max) 

all.equal(T_nc,T_nc2) 
# [1] TRUE 
Смежные вопросы