【发布时间】:2016-11-25 08:57:45
【问题描述】:
我希望计算矩阵的每一行与同一矩阵的每一行之间的variation of information。这个距离度量不包含在dist 中,所以我必须手动迭代。每一行是一个聚类,每一列是一个样本。矩阵的值为 {1,0} 表示样本是否是集群的成员。这是一个示例矩阵和我现在拥有的。不过,这可能需要相当长的时间,有没有更有效的方法来执行此计算?
# subset those clusterings which meet threshold of member count
m <- 100
n <- 70
membership <- matrix(sample(0:1, m * n, replace = TRUE), m, n)
# create distance matrix, set diagonal to 0
dist.matrix <- matrix(, nrow = m, ncol = m)
diag(dist.matrix) <- 0
# iterate through each row and calculate distances with subsequent rows
# fill values in distance matrix
for (i in 1:m) {
for (j in (i+1):m) {
if (j > m) break
vi <- igraph::compare(membership[i,], membership[j,], method = "vi")
dist.matrix[i,j] <- vi
dist.matrix[j,i] <- vi
}
}
【问题讨论】:
-
您是要计算矩阵每一列或矩阵每一行之间的距离吗?
-
每一行与其他行进行比较,创建一个维度等于行数的方阵。对角线上的值为 0,因为两个相同向量之间的距离为 0。外循环遍历所有行,内循环从当前行 +1 到最后一行。
-
您似乎想在样品之间进行距离测量,对吗?然后你可以做 mn
-
如果我不使用不同的方法,信息的变化,那会很好,
dist中不包含这些信息。 -
如果你经常需要这个,用 Rcpp 实现它。