【问题标题】:Alternative way to loop for faster computing循环更快计算的替代方法
【发布时间】:2013-12-10 13:41:28
【问题描述】:

假设我有一个 n*p 数据框。

我计算了一个包含 p*p 维数的 n 个矩阵的列表(在下面的 R 脚本中命名为 listMat),其中每个矩阵都是 n 个响应者中每个人的 p 个变量之间的距离矩阵。

我想计算一个称为 normMat 的 n*n 矩阵,其中每个元素对应于每个成对距离矩阵之间差异的范数。例如: normMat[1,2] 将是名为“diffMat”的矩阵的范数,其中 diffMat 是矩阵“listMat”列表的第一个距离矩阵和第二个距离矩阵之间的差。

我编写了以下运行良好的脚本,但我想知道是否有更有效的方法来编写它,以避免循环(例如使用 lapply 等)并使脚本执行更快。

# exemple of n = 3 distances matrix between p = 5 variables
x <- abs(matrix(rnorm(1:25),5,5))
y <- abs(matrix(rnorm(1:25),5,5))
z <- abs(matrix(rnorm(1:25),5,5))

listMat <- list(x, y, z)
normMat <- matrix(NA,n,n)

for (numRow in 1:n){
  for (numCol in 1:n){
    diffMat <- listMat[[numRow]] - listMat[[numCol]]
    normMat[numRow, numCol] <- norm(diffMat, type="F")
  }  
}

感谢您的帮助。

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    试试:

    normMat <- function(x, y) {
        norm(x-y, type="F")
    }
    
    sapply(listMat, function(x) sapply(listMat, function(y) normMat(x,y)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 2018-10-03
      • 2023-01-17
      • 1970-01-01
      相关资源
      最近更新 更多