在仅填充整数的 100x100 矩阵中,我在以元素 1,1 开始(并包括)开始的每一行内执行成对比较。对于任何为 TRUE 的比较,我在另一个预分配矩阵 [x](这只是一个相似矩阵)中的相应元素处计算 +1。
使用嵌套的 for 循环,此操作需要对每一行进行 N*(N-1)/2 + N 次比较。在我的机器上,下面的代码不会花费太长时间,但是有更好(好的,更快,更优雅)的方法吗?我已经考虑过使用“应用”的矢量化计算,但到目前为止,还没有任何乐趣。
result <- matrix( round(rnorm(10000,sample(5))), ncol=100)
x <-matrix(data=0, nrow=100,ncol=100)
system.time(
for (i in 1:100) {
for (j in 1:100) {
for (k in j:100) {
if (result[i,][j] == result[i,][k]) {
x[j,][k] = x[j,][k] + 1
}
}
}
}
)
user system elapsed
6.586 0.599 7.192
这是一个小例子:
“结果”矩阵
[,1] [,2] [,3] [,4]
[1,] 1 6 1 1
[2,] 6 1 5 3
[3,] 1 5 4 4
[4,] 2 3 4 2
structure(c(1, 6, 1, 2, 6, 1, 5, 3, 1, 5, 4, 4, 1, 3, 4, 2), .Dim = c(4L,4L))
在代码应用之后,我期望在 x 矩阵中:
[,1] [,2] [,3] [,4]
[1,] 4 0 1 2
[2,] 0 4 0 0
[3,] 0 0 4 2
[4,] 0 0 0 4