寻找 Networkx 中深度为 2 的所有子图

4

我在networkx中有一张庞大的图,想要获得每个节点深度为2的所有子图。是否有使用networkx内置函数的简便方法可以实现?


什么是深度为2的子图? - Joel
1
我听过它们被称为自我图。想象一下给定用户的Facebook和朋友的朋友。 - Paul Brodersen
1
而在 networkx 中,这个函数方便地被称为 ego_graph - Paul Brodersen
1个回答

7

就像我在评论中所说的那样,networkx.ego_graph非常适合这种情况。你只需要确保将半径设置为2(默认值为1):

import numpy as np
import matplotlib.pyplot as plt
import networkx as nx

# create some test graph
graph = nx.erdos_renyi_graph(1000, 0.005)

# create an ego-graph for some node
node = 0
ego_graph = nx.ego_graph(graph, node, radius=2)

# plot to check
nx.draw(ego_graph); plt.show()

enter image description here


这是一个有用的图形函数。假设您拥有一个深度为2的网络中所有节点的自我图表。还假设每个边缘都有一个美元金额。最后,假设您对5个特定的自我图表以及它们与深度2相关联的美元数量感兴趣,然后总结这些金额。我认为您可以轻松地将每个自我图表的所有边缘相加,然后将它们相加。但是,您不想重复计算金额。因此,如果一条边在3个自我网络中出现,则应将其视为一条边。是否有Networkx函数可实现此功能? - spacedustpi
1
@spacedustpi 不需要,只要获得5个自我图中所有边的“集合”,然后进行求和即可。 - Paul Brodersen
伟大、优雅、简单的想法。不知道为什么我在过去几天里一直苦苦挣扎。 - spacedustpi
1
@spacedustpi 很高兴能帮忙。下次不要太费劲了,制作一个好的 MWE 来说明你的问题,然后去 SO 或其中一个 Stack Exchange 寻求帮助。我在这里提出的一半问题都是不难解决的问题;只需要另一双眼睛来看到解决方案。我们都会偶尔遇到这样的问题。 - Paul Brodersen
肯定会的。没想到这里会有很多NetworkX的支持。事实证明这并不一定是一个NetworkX的解决方案。谢谢。 - spacedustpi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接