根据邻居节点的属性计算networkX中的平均邻居度
Calculate average neighbor degree in networkX according to the attributes of the neighboring nodes
在我的图表中,节点有一个属性告诉我节点的类型可以是 1 或 2。
G=nx.Graph()
G.add_node('N1',n_type=1)
G.add_node('N2',n_type=1)
G.add_node('N3',n_type=2)
G.add_edges_from([('N3','N1'),('N3','N2')])
如果我使用 NetworkX 的 nx.average_neighbor_degree(G) 函数,我会得到以下结果。
{'N1': 2.0, 'N2': 2.0, 'N3': 1.0}
但是,我想获得只考虑一种节点的平均邻居度。例如属性取值为1时的平均邻居度应该是:
{'N1': 0.0, 'N2': 0.0, 'N3': 1.0}
这是因为节点 N3 是唯一具有属性 n_type=1 的邻居的节点,并且它的邻居的平均值是 Degree(N1)+Degree(N2)/2 = 1+1/2 = 1
有什么建议吗?
检查源代码并稍微调整一下我可以想出这个。希望对你有帮助。
import networkx as nx
def get_average_nbr_deg_by_type(G, node_type):
avg = {}
for n, deg in G.degree:
nbrs_deg = [d for n, d in G.degree(G[n]) if G.nodes[n]['n_type'] == node_type]
deg = len(nbrs_deg)
if deg == 0:
deg = 1
avg[n] = sum(nbrs_deg) / float(deg)
return avg
get_average_nbr_deg_by_type(G, node_type=1)
# outputs {'N1': 0.0, 'N2': 0.0, 'N3': 1.0}
在我的图表中,节点有一个属性告诉我节点的类型可以是 1 或 2。
G=nx.Graph()
G.add_node('N1',n_type=1)
G.add_node('N2',n_type=1)
G.add_node('N3',n_type=2)
G.add_edges_from([('N3','N1'),('N3','N2')])
如果我使用 NetworkX 的 nx.average_neighbor_degree(G) 函数,我会得到以下结果。
{'N1': 2.0, 'N2': 2.0, 'N3': 1.0}
但是,我想获得只考虑一种节点的平均邻居度。例如属性取值为1时的平均邻居度应该是:
{'N1': 0.0, 'N2': 0.0, 'N3': 1.0}
这是因为节点 N3 是唯一具有属性 n_type=1 的邻居的节点,并且它的邻居的平均值是 Degree(N1)+Degree(N2)/2 = 1+1/2 = 1
有什么建议吗?
检查源代码并稍微调整一下我可以想出这个。希望对你有帮助。
import networkx as nx
def get_average_nbr_deg_by_type(G, node_type):
avg = {}
for n, deg in G.degree:
nbrs_deg = [d for n, d in G.degree(G[n]) if G.nodes[n]['n_type'] == node_type]
deg = len(nbrs_deg)
if deg == 0:
deg = 1
avg[n] = sum(nbrs_deg) / float(deg)
return avg
get_average_nbr_deg_by_type(G, node_type=1)
# outputs {'N1': 0.0, 'N2': 0.0, 'N3': 1.0}