在两个矩阵上应用函数

时间:2016-03-18 00:39:22

标签: r for-loop matrix apply matrix-multiplication

对于矩阵Beta和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)

1 个答案:

答案 0 :(得分:4)

使用crossprod应该快得多

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

all.equal(T_nc,T_nc2)
# [1] TRUE