r - 循环更快计算的替代方法

标签 r matrix

假设我有一个 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")
  }  
}

感谢您的帮助。

最佳答案

尝试:

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

sapply(listMat, function(x) sapply(listMat, function(y) normMat(x,y)))

关于r - 循环更快计算的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20496124/

相关文章:

sql - 为每个请求创建到 MS SQL 数据库的新 RJDBC 连接是否存在性能/其他缺点?

python - 在 Python 中使用 P 值进行 F 检验

r - 数据表 := does not support logical data types when adding new column?

r - 从 TermDocumentMatrix 创建稀疏矩阵

opencv - 通过复制数据 opencv 调整矩阵大小

r - 优化全局最小值

python - 如何在 Python 3.3.5 中添加矩阵的对角线

r - 如何在 R 中有效转置矩阵?

c++ - 如何使用vector <vector <int >>找到严格位于矩阵次对角线上的元素之和?

python - 许多矩阵的元素中位数,python pandas