use*_*564 3 r matrix adjacency-list igraph
问我有一个 erdos.reyni 图。我感染了一个顶点,想看看疾病会遵循哪个顶点序列?igraph 有像 get.adjacency()、neighbors() 这样有用的函数。
细节。这是具有顶点名称而不是 0,1 标志的邻接矩阵,我正试图从中消除传染链。如果某个顶点被感染,就像流行病通过图表的流/序列一样。让我们不要担心这里的感染概率(假设所有命中的顶点都以概率 1 感染)。
所以假设我点击了顶点 1(这里是第 1 行)。我们看到它有到顶点 4、5、18、22、23、24、25 的传出链接。那么接下来的顶点将是那些连接到 4,5,18...25 的顶点,即 row4, row5, row18,... row25 中的那些值。然后,根据模型,疾病将通过这些等等传播。
我知道我可以传递一个字符串来对矩阵行进行排序。我的问题是,我无法弄清楚如何生成该序列。
矩阵看起来像这样。
> channel
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 4 5 18 22 23 24 25 NA
[2,] 6 10 11 18 25 NA NA NA
[3,] 7 11 18 20 NA NA NA NA
[4,] 24 NA NA NA NA NA NA NA
[5,] 1 3 9 13 14 NA NA NA
[6,] 3 8 9 14 19 23 NA NA
[7,] 3 4 8 15 20 22 NA NA
[8,] 2 3 25 NA NA NA NA NA
[9,] 3 4 11 13 20 NA NA NA
[10,] 4 5 8 15 19 20 21 22
[11,] 3 13 15 18 19 23 NA NA
[12,] 11 13 16 NA NA NA NA NA
[13,] 4 6 14 15 16 17 19 21
[14,] 2 6 13 NA NA NA NA NA
[15,] 3 17 20 NA NA NA NA NA
[16,] 6 15 18 23 NA NA NA NA
[17,] 2 25 NA NA NA NA NA NA
[18,] 2 5 NA NA NA NA NA NA
[19,] 3 11 NA NA NA NA NA NA
[20,] 1 4 7 10 12 21 22 25
[21,] 2 4 6 13 14 16 18 NA
[22,] 1 3 4 15 23 NA NA NA
[23,] 1 16 24 NA NA NA NA NA
[24,] 7 8 19 20 22 NA NA NA
[25,] 7 12 13 17 NA NA NA NA
Run Code Online (Sandbox Code Playgroud)
我想根据选择标准重新排序这个矩阵,如下所示:
R 会最有帮助(但我对算法感兴趣,所以任何 python、ruby 等都会很棒)。结果向量的长度为 115 (8x25=200 - 85 NAs=115)。并且看起来像这样。如果顶点 1 被感染,这基本上就是疾病的传播方式。
4,5,18,22,23,24,25,24,1,3,9,13,14,2,5,1,3,4,15,23,1,16,24,7,8,19,20,22,7,12,13,17,7,8,19,20,22, 4,5,18,22,23,24,25,7,11,18,20...
Run Code Online (Sandbox Code Playgroud)
到目前为止我所知道的: 1. R 有一个包**igraph**可以让我计算邻居(graph, vertex, "out")
2. 同样的包也可以生成get.adjlist(graph...), get.adjacency
找到这样的“传染链”相当于在图中进行广度优先搜索,例如:
library(igraph)
set.seed(50)
g = erdos.renyi.game(20, 0.1)
plot(g)
order = graph.bfs(g, root=14, order=TRUE, unreachable=FALSE)$order
Run Code Online (Sandbox Code Playgroud)
输出:
> order
[1] 14 1 2 11 16 18 4 19 12 17 20 7 8 15 5 13 9 NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
902 次 |
| 最近记录: |