【问题标题】:Apply function on two matrices在两个矩阵上应用函数
【发布时间】:2016-07-04 14:33:02
【问题描述】:

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

【问题讨论】:

  • 很棒的收获。谢谢。我编辑了我的代码,现在 Beta 和 b 的行数相同。

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


【解决方案1】:

使用crossprod 应该会快很多

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

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

【讨论】:

    猜你喜欢
    • 2020-05-05
    • 2015-07-31
    • 2014-12-04
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多