【问题标题】:Creating a regular graph or adjacency matrix in R, with igraph?使用 igraph 在 R 中创建常规图或邻接矩阵?
【发布时间】:2018-01-13 00:45:46
【问题描述】:

我目前正在尝试(理想情况下)使用 igraph 生成常规邻接矩阵。我希望每个单元与 k 个人成为邻居。

对于 k = 2,我希望得到:

library(igraph)
as_adj(make_graph(c(1, 2, 1, 10, 2, 3, 3, 4, 4, 5 ,5,6, 6,7, 7,8, 8,9, 9, 10), directed = FALSE))

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

有没有一种方法可以使用igraph 中的现有函数来创建像上面那样的图形,但是对于一个通用的 k?谢谢。

【问题讨论】:

  • 您说您想要一个“循环图”,但似乎不清楚这对 k>2 意味着什么。您是否只想要一个所有节点都具有度数 =k 的图?
  • @G5W 是的,就是这个想法,谢谢!
  • 这称为“正则图”,而不是“循环图”。您能否更新标题以反映您实际寻找的内容?从您的其他 cmets 看来,您实际上想要一个“连接的正则图”。

标签: r matrix igraph


【解决方案1】:

您可以使用sample_degseq

“创建具有给定顶点度数的图形通常很有用。这正是 sample_degseq 可以。”

k=3 # degree for each node
n=10 # number of nodes
g = sample_degseq(rep(k,n),method = "simple.no.multiple")

邻接:

as_adj(g)

[1,] . . 1 . 1
[2,] . . 1 1 .
[3,] 1 1 . . .
[4,] . 1 . . 1
[5,] 1 . . 1 .

剧情:

plot(g)

【讨论】:

  • 似乎有时上面的函数会随机生成两个没有连接在一起的网络。有没有办法强制每个节点之间建立连接?换句话说,有时当我运行代码时,节点 8、6、4 在网络中,其余节点在网络中。谢谢!
  • 你可以把它放在一个while循环中,并使用edge_connectivity(g)来检查图表是否包含未连接的网络。在这种情况下,它将返回 0。希望对您有所帮助!
猜你喜欢
  • 2017-10-20
  • 1970-01-01
  • 2018-12-02
  • 2015-06-21
  • 2018-04-25
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多