in utils.py [0:0]
def k_hop_subgraph(src, dst, num_hops, A, sample_ratio=1.0,
max_nodes_per_hop=None, node_features=None,
y=1, directed=False, A_csc=None):
# Extract the k-hop enclosing subgraph around link (src, dst) from A.
nodes = [src, dst]
dists = [0, 0]
visited = set([src, dst])
fringe = set([src, dst])
for dist in range(1, num_hops+1):
if not directed:
fringe = neighbors(fringe, A)
else:
out_neighbors = neighbors(fringe, A)
in_neighbors = neighbors(fringe, A_csc, False)
fringe = out_neighbors.union(in_neighbors)
fringe = fringe - visited
visited = visited.union(fringe)
if sample_ratio < 1.0:
fringe = random.sample(fringe, int(sample_ratio*len(fringe)))
if max_nodes_per_hop is not None:
if max_nodes_per_hop < len(fringe):
fringe = random.sample(fringe, max_nodes_per_hop)
if len(fringe) == 0:
break
nodes = nodes + list(fringe)
dists = dists + [dist] * len(fringe)
subgraph = A[nodes, :][:, nodes]
# Remove target link between the subgraph.
subgraph[0, 1] = 0
subgraph[1, 0] = 0
if node_features is not None:
node_features = node_features[nodes]
return nodes, subgraph, dists, node_features, y