我有一个矩阵,其中每一行都是聚类算法的输出。例如,通过3次实验,可能有7个数据点和4个可能的聚类:
# 1 2 1 2 2 3 3 # output of first clustering. Numbers are cluster labels
# 1 2 1 2 3 4 4 # output of second clustering
# 2 1 2 3 2 1 1 # output of third clustering
我知道如何创建一个共生矩阵,告诉两个点是否在同一个群集中:
xp <- c(1, 2, 1, 2, 2, 3, 3)
pairwise <- apply(as.matrix(xp), 1,
function(x) as.numeric(x==as.matrix(xp)))
如何获得所有实验的成对矩阵的总和?
我这样做:
# toy data
cluster.assignments <- t(replicate(100,sample(10, replace=TRUE)))
n_samples <- dim(cluster.assignments)[1]
n_dim <- dim(cluster.assignments)[2]
pairwise <- matrix(0, n_dim, n_dim)
for(i in 1:n_samples){
pairwise <- pairwise +
apply(t(cluster.assignments[i,]), 2,
function(x) as.numeric(x==cluster.assignments[i,]))
}
pairwise
但是当我有10000行时,这有点太慢了。我想有办法做某种申请以避免这种for
,但我找不到它。