从索引向量创建二元邻接矩阵

时间:2017-07-25 19:28:44

标签: r matrix adjacency-matrix

假设我有一个看起来像这样的矢量:

A

这样每个元素对应一个从1到5的索引。

从这个向量创建二元邻接矩阵的有效方法是什么?要详细说明,矩阵A[i,j] = 1应该是x[i] = x[j] /,否则为0。

1 个答案:

答案 0 :(得分:7)

在一行中,你可以做到

outer(x, x, function(x, y) as.integer(x==y))

返回

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    0    0    0    0    0    1    0    0     0
 [2,]    0    1    1    1    0    1    0    0    1     0
 [3,]    0    1    1    1    0    1    0    0    1     0
 [4,]    0    1    1    1    0    1    0    0    1     0
 [5,]    0    0    0    0    1    0    0    0    0     0
 [6,]    0    1    1    1    0    1    0    0    1     0
 [7,]    1    0    0    0    0    0    1    0    0     0
 [8,]    0    0    0    0    0    0    0    1    0     0
 [9,]    0    1    1    1    0    1    0    0    1     0
[10,]    0    0    0    0    0    0    0    0    0     1

或,分两行

myMat <- outer(x, x, "==")
myMat[] <- as.integer(myMat)

检查它们是否相同。

identical(myMat, outer(x, x, function(x, y) as.integer(x==y)))
[1] TRUE

数据

set.seed(1234)
x <- sample(5, 10, replace = TRUE)