- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
TLDR:我想提取 igraph 中两个顶点之间每条路径的边类型。有没有相对理智的方法来做到这一点?
我工作的诊所最近在一所高中进行了相当大的(1400 人)肺结核接触者调查。我有所有学生和老师的类(class)表(!),并将它们放入网络(使用 R 中的 igraph),每个学生和每个房间-周期组合作为一个顶点(例如,周期中 123 房间的类(class)1 是一个顶点,其有向边指向第 2 期 123 房间的类(class))。我也知道哪些房间共用通风系统——这是一种似是而非但不太可能的感染机制。该图是从单一来源案例中导出的,因此网络上的每条路径中只有两个人 - 来源和联系人,由可变数量的房间周期顶点分隔。从概念上讲,有四种路径:
每条边都有一个属性,指示它是人对人暴露、同室不同时期还是通风边。
作为在此网络上建模感染的中间步骤,我想简单地计算一下学生接触过的每种类型的次数。例如,一个学生可能与源共享一个类(class),然后在一段时间后进入了源所在的房间,也许第二天又进入了一个与通风设备相邻的房间。该学生的指标将是:
personal.contact: 0
shared.class: 1
next.period: 1
vent: 1
不过,我不确定如何最好地获取此类信息 - 我看到了获取最短路径的函数,这使得识别个人联系链接变得容易,但我认为我需要评估 < em>所有路径(在典型的社交网络上要求这似乎是一件疯狂的事情,但当只有源和房间周期有边缘时就没那么疯狂了)。如果我能达到每个源到接触路径都由边缘类型的有序向量表示的地步,我想我可以轻松地将它们子集化到我的标准。我只是不知道如何到达那里。如果 igraph 不是合适的框架,我只需要在学生的日程安排上写一些可怕的大循环,那就这样吧!但在我潜入那个洞之前,我希望得到一些指导。
这是与三个间接路径中的每一个的联系的示例图:
# Strings ain't factors
options(stringsAsFactors = FALSE)
library(igraph)
# Create a sample case
edgelist <- data.frame(out.id = c("source", "source",
"source", "Rm 123 Period 1",
"Rm 125 Period 2", "Rm 125 Period 3",
"Rm 127 Period 4", "Rm 129 Period 4"),
in.id = c("Rm 123 Period 1", "Rm 125 Period 2",
"Rm 127 Period 4", "contact",
"Rm 125 Period 3", "contact",
"Rm 129 Period 4", "contact"),
edge.type = c("Source in class", "Source in class",
"Source in class", "Student in class",
"Class-to-class",
"Student in class", "Vent link",
"Student in class"
)
)
samp.graph <- graph.data.frame(edgelist, directed = TRUE)
# Label the vertices with meaningful names
V(samp.graph)$label <- V(samp.graph)$name
plot(samp.graph, layout = layout.fruchterman.reingold)
最佳答案
我不完全确定我理解你的图形模型,但如果问题是:
I have two vertices and I wish to extract every path between them,
then extract the edge attributes of those edges.
那么也许这可行。
使用广度优先搜索。 Igraph 包含一个,但它很容易推出你自己的,这将使你更灵活地决定你想要获得什么信息。我假设你的图中没有循环——否则你会得到无限多的路径。我不太了解 Python(尽管我确实在 R 中使用 igraph),所以这里有一些伪代码。
list <- empty
allSimplePaths(u, v, thisPath)
if (u == v) return
for (n in neighborhood(u))
if (n in thisPath)
next
if (u == v)
list <- list + (thisPath + v)
for (n in neighborhood(u))
thisPath <- thisPath + n
allSimplePaths(n, v, thisPath)
thisPath <- thisPath - thisPath.end
基本上它是说“从每个顶点开始,尝试所有可能的扩展路径以到达终点。”添加另一个 thisPathEdges 并插入边,将其传递给函数以及顶点是一件简单的事情。当然,如果它不是递归的,这会运行得更好。请小心,因为此算法可能会破坏您的堆栈中足够多的节点。
您可能仍想使用@PaulG 的模型,并且只在学生节点之间设置多条边。您可以做一些很酷的事情,比如运行广度优先搜索以查看疾病如何传播,或者找到最小生成树来估计时间,或者找到最小切割来隔离正在进行的感染或其他事情。
关于python - 如何在 igraph 中提取某些路径类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10707318/
我有一个 N x 2 的整数表,称为 games[ , ]。节点/边表转换为图形: net edges g ecount(g) 7 > degree(g, 103, mode="out") 4
我开始评估 igraph 库及其功能。 我需要计算 igraph_de_bruijn() 函数生成的图的哈密顿路径。 igraph 库中是否有任何现成的功能?我不想从头开始实现它。 C中的一个例子将是
我正在尝试像这样深度复制我的 igraph 对象: copy.deepcopy(graph) 其中 graph 是 igraph 对象,一个只有几个顶点的完整图。但是我得到这个错误: Fi
我有一个需要过滤的大图。过滤(子图)后,我最终得到一个子图列表。我需要再次将所有这些子图组合成一个图。我不知道如何组合大列表(近百万个子图) > require(igraph) > graph V(
我有一个简单的问题,函数 community.to.membership 在 igraph 1.0 中是否被弃用了?我可以找到 membership 函数,但它不包括选项 merges、steps 等
我正在使用 R 中的 igraph。我知道我们可以用选定的顶点创建一个子图,但如果这些节点没有直接连接,那么新子图中将不会有边。如果有其他节点(不是顶点列表的一部分)间接连接这两个节点,有没有办法制作
我正在使用 R 中的 igraph。我知道我们可以用选定的顶点创建一个子图,但如果这些节点没有直接连接,那么新子图中将不会有边。如果有其他节点(不是顶点列表的一部分)间接连接这两个节点,有没有办法制作
是否有与此 igraph 等效的 R function在 Python igraph 中? graph_from_data_frame(d, directed = TRUE, vertices = N
a=g.vs(Name_eq="A") b=g.vs(Name_eq="B") 我想在 a 和 b 之间添加一条边,我该怎么做? 最佳答案 好的,我们这里好像有两个问题。一个在问题标题中:“如果我们有
我有一个大型无向加权图,其中包含约 375,000 个节点和约 3,400,000 个边,表示为邻接表(字典的字典)。 例如 A --> (B,2), (C,4) B --> (A,2) C -->
igraph here 中对可用的社区检测算法进行了很好的比较。 .但是,在可以应用于加权边的算法中使用权重存在一些歧义。 通常,边缘权重将被定向,以便更高的权重表明将节点保持在一起(例如友谊的强度)
我在 igraph 中使用了 fastgreedy 算法在加权无向图中进行社区检测。后来我想看看模块化性,不同的方法我得到了不同的值,我想知道为什么。我提供了一个简短的示例,它演示了我的问题: lib
我正在使用 igraph g <- graph_from_adjacency_matrix(adj2, mode = "directed") plot.igraph(g, vertex.size =
我想知道如果 igraph-R 包中没有实现基于模块化聚类的算法,由 Newman 于 2004 年发布:“Fast algorithm for detection community structu
我有一个类似的问题:Reading adjacency lists with isolated nodes using igraph 我想绘制一些没有关系的节点。但是由于某种原因,上面线程中提到的解决
我有一个交互网络,我使用以下代码制作邻接矩阵,随后计算网络节点之间的相异性,然后将它们聚类以形成模块: ADJ1=abs(adjacent-mat)^6 dissADJ1% as.dist %
我想使用 igraph 来探索一些网络数据。我的数据具有以下结构: a <- c(13, 32, NA, NA) b <- c(32, NA, NA, NA) c <- c(34, 13, 32, N
我使用 igraph graph_from_data_frame 函数从数据框构建了一个图。我的前两列代表边缘列表,我还有另一列名为“权重”。还有其他几个属性列。 然后我尝试使用 cluster_fa
我的问题如下: 考虑一个具有 10000 个节点和 4800 条边的无向图。 给定这个图和这个图的一个节点(例如,节点 1),我需要 igraph (R) 中的一个命令来获取这个节点 1 和图中最远节
我已指导 igraph 并想获取所有周期。 girth 函数有效,但只返回最小的周期。 R 中有没有办法在长度大于 3 的图中获取所有循环(没有顶点指向自身和循环) 最佳答案 它不是 igraph 中
我是一名优秀的程序员,十分优秀!