ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python-如何从图中分离出子网,包括节点和深度n之前的边?

2019-10-29 13:58:14  阅读:372  来源: 互联网

标签:graph networkx python


我正在尝试编写一个脚本,该脚本可让我从命令行界面修改(编辑,剪切,更改)一些大的网络文件.我要尝试做的一件事是根据节点标签中的匹配项将子网与较大的网络隔离.

因此,基本上我将拥有一个可能带有7000个节点以及带有各种标签的相应边的networkx图.然后,我将一个字符串(例如“ Smith”)匹配到节点.我可能会匹配30个节点(标签:“ John Smith”,标签:“ Peter Smith”,等等).然后,我想创建一个新的networkx网络,其中包含这30个节点以及它们具有的边缘以及这些边缘所连接的节点,深度最多为n,或者直到找到所有节点和边缘为止.

我当前的代码是垃圾,所以也许我会尝试编写一些伪代码:

for node in networkx_network: 
    if searched_string in node:
        new_network.add(node.subnetwork(depth=n))

我花了几天的时间来寻找解决方案,也许子图,邻居,connected_components是正确的选择,但是我不能全神贯注于如何做到这一点.

解决方法:

single_source_shortest_path具有可选的cutoff参数.包括它,您可以告诉networkx从根本上找到到给定节点一定距离内的节点的路径.这有点矫kill过正,因为这些路径中还有许多其他不需要的信息.然后,如果仅使用结果路径集的键,则可以在该距离之内到达所有节点,networkx可以找到包含所有这些节点及其之间边的图.

通过查看源代码,并消除跟踪实际路径所花费的精力,可以根据需要提高效率.但就目前而言,以下工作原理:

import networkx as nx
G=nx.fast_gnp_random_graph(100000,0.00002) #sample graph.
base = range(3) #arbitrarily choose to start from nodes 0, 1, and 2
depth = 3  #look for those within length 3.
foundset = {key for source in base for key in nx.single_source_shortest_path(G,source,cutoff=depth).keys()}
H=G.subgraph(foundset)
nx.draw_networkx(H)
import pylab as py
py.savefig('tmp.png')    

enter image description here

标签:graph,networkx,python
来源: https://codeday.me/bug/20191029/1960409.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有