创建一个数据框,其中矩阵的每个条目有一行以及相应的行和列编号,然后将该数据框细分为1个条目.(@Andrew Gustar删除了他的帖子,但该帖子显示d的行和列也可以表示为d <- as.data.frame(which(m == 1, arr.ind = TRUE))
).现在使用outer来确定该数据帧的两行是否表示相邻 node .将==1更改为<=1在设置adj if node 可以与其相邻的行中.
d <- data.frame(value = c(m), row = c(row(m)), col = c(col(m))) |>
subset(value == 1)
adj <- +with(d, abs(outer(row, row, `-`)) + abs(outer(col, col, `-`)) == 1)
通过将邻接矩阵转换为稀疏矩阵,可以方便地查看邻接矩阵.
Matrix::Matrix(adj)
给:
23 x 23 sparse Matrix of class "dsCMatrix"
[1,] . 1 . . . . . . . . . . . . . . . . . . . . .
[2,] 1 . 1 . 1 . . . . . . . . . . . . . . . . . .
[3,] . 1 . . . . . . . . . . . . . . . . . . . . .
[4,] . . . . . . 1 . . . . . . . . . . . . . . . .
[5,] . 1 . . . . . . 1 . . . . . . . . . . . . . .
[6,] . . . . . . 1 . . . 1 . . . . . . . . . . . .
[7,] . . . 1 . 1 . . . . . . . . . . . . . . . . .
[8,] . . . . . . . . 1 . . . . . . . . . . . . . .
[9,] . . . . 1 . . 1 . 1 . . . . . . . . . . . . .
[10,] . . . . . . . . 1 . . 1 . . . . . . . . . . .
[11,] . . . . . 1 . . . . . . . 1 . . . . . . . . .
[12,] . . . . . . . . . 1 . . 1 . . . 1 . . . . . .
[13,] . . . . . . . . . . . 1 . 1 . . . . . . . . .
[14,] . . . . . . . . . . 1 . 1 . 1 . . . . . . . .
[15,] . . . . . . . . . . . . . 1 . . . 1 . . . . .
[16,] . . . . . . . . . . . . . . . . . . 1 . . . .
[17,] . . . . . . . . . . . 1 . . . . . . . . 1 . .
[18,] . . . . . . . . . . . . . . 1 . . . . . . . 1
[19,] . . . . . . . . . . . . . . . 1 . . . 1 . . .
[20,] . . . . . . . . . . . . . . . . . . 1 . 1 . .
[21,] . . . . . . . . . . . . . . . . 1 . . 1 . . .
[22,] . . . . . . . . . . . . . . . . . . . . . . 1
[23,] . . . . . . . . . . . . . . . . . 1 . . . 1 .
我们可以使用igraph来绘制图形:
library(igraph)
set.seed(123)
g <- graph.adjacency(adj, mode = "undirected")
plot(g, vertex.color = "white", vertex.size = 10, vertex.label.cex = 0.7)
笔记
m <- structure(c(1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1,
0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1), .Dim = c(6L,
6L), .Dimnames = list(NULL, NULL))