python - 我有一个无向 NetworkX 图,想找到 node_a 的所有邻居,它们也是 node_b 的邻居
问题描述
直截了当的问题:如何在 node_a 和 node_b 之间找到所有共同的邻居,最好的方法是什么?
我的代码是:
my_node_list_a = [ ... ]
my_node_list_b = [ ... ]
for c in my_node_list_a:
for x in nx.neighbors(G, c):
for y in my_node_list_b:
for h in nx.neighbors(G, y):
if x in y:
print(x)
这是糟糕的代码。首先,我必须手动填充my_node_list_a
并my_node_list_b
通过执行for i in G.nodes(): print(i)
并且只将我想要运行循环的节点放入数组中。
编辑:
标题说的是邻居,但我是 networkx 的新手,所以它可能不是正确的术语。如果邻居只表示距离为 1 的节点,那么是的,这就是我想要的。
但是,我也对哪些节点连接数组中的节点my_node_list_a
以及my_node_list_b
距离大于 1 感兴趣,所以如果有人能告诉我如何做到这一点,它也会很有用(基本上,向我展示路径( s) 他们之间)
进一步编辑:
我需要G
根据所选节点的邻居从我的主图创建一个图。
最好的方法是什么?
解决方案
要查找两个节点之间的共同邻居,您可以使用以下函数common_neighbors()
:
import networkx as nx
G = nx.turan_graph(6, 2)
%matplotlib inline # jupyter notebook
nx.draw(G, with_labels=True)
list(nx.common_neighbors(G, 3, 5))
# [0, 1, 2]
要查找两组节点(顶点)之间的共同邻居,您可以使用以下函数node_boundary()
:
import networkx as nx
from itertools import chain
G = nx.grid_graph(dim=[5, 5])
list_A = [(3, i) for i in range(5)]
list_B = [(1, i) for i in range(5)]
intersec = nx.node_boundary(G, list_A) & nx.node_boundary(G, list_B)
# {(2, 1), (2, 0), (2, 3), (2, 2), (2, 4)}
color = []
for i in G.nodes():
if i in intersec:
col = 'green'
elif i in chain(list_A, list_B):
col = 'red'
else:
col = 'pink'
color.append(col)
%matplotlib inline
nx.draw(G, with_labels=True, node_color=color, node_size=1000)
推荐阅读
- typo3 - TYPO3 DatabaseQueryProcessor:相同 UID 的多个输出
- python-3.x - .dat 文件中的缺失值(空)导致读取文件时出错
- c# - 如何修复无法加载文件或程序集异常?
- java - 在身份验证期间使用 JWT 令牌反序列化 cookie 无法正确反序列化
- amazon-web-services - 填写缺失的日期 Redshift
- sql - 如何限制变量包含序列或相同的数字
- node.js - 推送到 Heroku 和临时数据
- node.js - 获取勾选了 express js 复选框的项目的字段总和
- r - 检查列表之间的值并添加到 R 中的新列表的条件
- c - 停止用户为数组引入值