我有一个包含许多基因及其相互作用的图。我有兴趣找到一个子图,该子图具有一组特定基因的最大值,例如图中的A,B,C,D,E。
尝试过BFS算法以及连接的组件。但是不知道如何找到我感兴趣的基因的子图。
def bfs(G, gene, n):
"""
Using breadth-first search
returns a graph of breadth n starting at source gene.
"""
S = nx.algorithms.traversal.breadth_first_search.bfs_tree(G, source=gene, depth_limit=n)
return S
给定一个具有V个顶点和E个边的图G(V,E),我想找到一个子图G'(v,e),其中v是V的子集,这样G'包含了我的最大节点兴趣。
答案 0 :(得分:2)
编辑虽然我认为我的原始代码(现在在底部)很好,但是我认为使用node_connected_component(G,u)
可以做得更好,该返回的节点集与{ {1}}。
让我解释下面的代码。首先,我将逐步介绍有趣的基因。对于第一个,我寻找它所在的u
的组成部分,然后找到相同组成部分中的所有其他有趣基因。然后,当我查看每个后续有趣的基因时,请确保没有在与另一个组件相同的组件中遇到它。如果是一个新组件,我会在同一组件中找到所有其他有趣的基因。最后,我找到了最有趣的基因。
G
看看component_count = {}
seen = {}
for source in interesting_genes:
if source not in seen:
reachable_nodes = nx.node_connected_component(G, source)
reachable_nodes_of_interest = [target for target in interesting_genes if target in reachable_nodes]
for node in reachable_nodes_of_interest:
seen[node] = True
component_count = len(reachable_nodes_of_interest)
source = max(component_count, key=component_count.get) #finds the node with the largest component_count
Gprime = G.subgraph(nx.node_connected_component(G, source))
的{{3}}。
single_source_shortest_path_length