Spaces:
Running
Running
""" | |
Ego graph. | |
""" | |
__all__ = ["ego_graph"] | |
import networkx as nx | |
def ego_graph(G, n, radius=1, center=True, undirected=False, distance=None): | |
"""Returns induced subgraph of neighbors centered at node n within | |
a given radius. | |
Parameters | |
---------- | |
G : graph | |
A NetworkX Graph or DiGraph | |
n : node | |
A single node | |
radius : number, optional | |
Include all neighbors of distance<=radius from n. | |
center : bool, optional | |
If False, do not include center node in graph | |
undirected : bool, optional | |
If True use both in- and out-neighbors of directed graphs. | |
distance : key, optional | |
Use specified edge data key as distance. For example, setting | |
distance='weight' will use the edge weight to measure the | |
distance from the node n. | |
Notes | |
----- | |
For directed graphs D this produces the "out" neighborhood | |
or successors. If you want the neighborhood of predecessors | |
first reverse the graph with D.reverse(). If you want both | |
directions use the keyword argument undirected=True. | |
Node, edge, and graph attributes are copied to the returned subgraph. | |
""" | |
if undirected: | |
if distance is not None: | |
sp, _ = nx.single_source_dijkstra( | |
G.to_undirected(), n, cutoff=radius, weight=distance | |
) | |
else: | |
sp = dict( | |
nx.single_source_shortest_path_length( | |
G.to_undirected(), n, cutoff=radius | |
) | |
) | |
else: | |
if distance is not None: | |
sp, _ = nx.single_source_dijkstra(G, n, cutoff=radius, weight=distance) | |
else: | |
sp = dict(nx.single_source_shortest_path_length(G, n, cutoff=radius)) | |
H = G.subgraph(sp).copy() | |
if not center: | |
H.remove_node(n) | |
return H | |