我有一个networkx
图G
,我使用此代码计算了距离特定节点2个集线器的节点:
def node_neighborhood(G, node, n=2):
"""
Returns a list of nodes which are the n-neighborhood of the input node.
Parameters
----------
G: networkx graph object.
node: the node to get the neighborhood for.
n: the neighborhood degree.
"""
path_lengths = nx.single_source_dijkstra_path_length(G, node)
return [node for node, length in path_lengths.iteritems()
if length == n]
所以这段代码返回的节点是远离指定节点的2个集线器。
接下来,我使用以下代码从G
中删除了node_neighborhood
中不在返回列表中的所有节点:
for n in G.nodes():
if (n not in node_2_neiborhood) and (n != node):
G.remove_node(n)
else:
if G.degree(n) == 0:
raise Exception("a node has zero degree!!!")
然而问题是节点具有零度的异常被抛出。我的问题是为什么?如果一个节点距离X是2个集线器,那么该节点必须至少有一个边缘!那么邻域中的节点如何可能具有零度?!
答案 0 :(得分:0)
这种行为是如此正常和预期,因为采用这种方法我将删除距离目标节点1个集线器的节点。所以我正在删除2个集线器远离节点和目标节点之间的路径。