【发布时间】:2012-11-25 02:36:59
【问题描述】:
在仅填充整数的 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
【问题讨论】:
-
请为小
result示例提供机器可读代码。dput做得很好。 -
知道了。感谢您的建议。
-
好的,不,我明白了,x 中的条目是 j,k 条目,而不是 i,j 条目。我不明白你为什么这样做,但这显然不是我之前写的答案。
标签: r