python - 如何过滤具有特定属性的节点并使用networkx图保留路径
问题描述
这些天我正在研究networkx图。假设我有这张图。优先级 1 与蓝色节点,优先级 2 与黄色节点,优先级 3 与紫色节点,优先级 4 与绿色节点。
我想按优先级过滤。例如第一个优先级 1,它应该过滤带有蓝色的节点。我想保留蓝色节点(优先级 1)并忽略其余节点,它应该看起来像这样。
对于优先级 2,包括优先级节点,它应该以黄色显示节点。保持优先级 1(蓝色)和优先级 2(黄色)。在这里,我应该保持从 10 到 190 的路径,因为有一条来自被忽略节点的路径。它应该看起来像这样。
优先级 3 和 4 也是如此。例如,对于优先级 3,我想将优先级 1、2 和 3 保持在一起,就像我在优先级 2 中展示的那样。
我就是这样开始的。
collector = nx.DiGraph()
for n1, atrr1 in g1.nodes(data ='True'):
for n2, atrr2 in g1.nodes(data ='True'):
if ((g1.node[n1]['priority'] ==1) & (g1.node[n2]['priority'] ==2)):
if (has_path(g1,n1, n2)):
collector.add_edge(n1,n2)
if ((g1.node[n2]['priority'] ==2) & (g1.node[n1]['priority'] ==2)):
if (has_path(g1,n1, n2)):
collector.add_edge(n1,n2)
nx.draw(collector, with_labels = True, pos = nx.spring_layout(collector))
plt.rcParams["figure.figsize"] = [6,6]
plt.axis('off')
plt.show()
谁能帮我在python中做到这一点?
解决方案
一种方法是计算图形可达性矩阵(如果节点可以通过图形边缘从节点到达,则具有1
in 行a
、列的方矩阵)。你可以在这里找到如何实现它。然后,您所要做的就是过滤掉您想要的节点并使用计算矩阵为过滤后的节点重新绘制边(通过仅遍历与新图中出现的节点相对应的行和列并绘制一个有 a 的边缘)。b
b
a
1
推荐阅读
- google-kubernetes-engine - Google Kubernetes Engine - 如何更新容器优化操作系统 (COS)
- bash - Ifplugd:错误“不正确的操作参数”
- c++ - 为什么 Wemos D1 工作一段时间后没有反应
- google-app-engine - Google Cloud Platform:Cloud Functions 与 App Engine
- php - 使用数组来确定输出而不是 if
- javascript - 如何正确复制内部 HTML?
- swiftui - 如果用常量初始化,@State 变量不能更改
- amazon-web-services - 在 AWS 中定期运行数千个计划作业?
- javascript - React Route 路径中 router 参数的变化是否会分别导致 Component 和其他初始渲染的重新挂载?
- java - Springboot中基于条件的返回列表?