我有一个向量表示将对象分割成簇:
#9 objects partitioned into 6 clusters
> part1 <- c(1,2,3,1,4,2,2,5,6)
我可以很容易地创建相似度矩阵,其中相似性的度量仅为{0,1}:0如果两个元素在不同的簇中,则为0;如果是相同的话,则为1:
> sim <- outer(part1,part1,"==")
> sim
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[2,] FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
[3,] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
[4,] TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
[5,] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
[6,] FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
[7,] FALSE TRUE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
[8,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
[9,] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
但是对于大型矢量(100,000个对象),由于内存限制,它不起作用。
群集平均很小,因此稀疏矩阵足够紧凑。我查看了Matrix包,找不到像outer()
这样的稀疏对象。
那么有没有其他简单的方法直接从向量创建这样的矩阵(没有循环遍历所有向量的元素对并逐个元素填充稀疏矩阵)?