2
假设我有一个n * p数据帧。循环加速计算的替代方法
我计算了p * p维度的n个矩阵列表(在下面的R脚本中名为listMat),其中每个矩阵是n个响应者中每个响应者的p个变量之间的距离矩阵。
我想计算一个名为normMat的n * n矩阵,每个元素对应于每个成对距离矩阵之间的差值的范数。例如:normMat [1,2]将是名为“diffMat”的矩阵的常态,其中diffMat是Matrix“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")
}
}
感谢您的帮助。