Python 根据相邻节点的属性计算networkX中的平均邻居度

Python 根据相邻节点的属性计算networkX中的平均邻居度,python,networkx,Python,Networkx,在我的图中,节点有一个属性,告诉我节点的类型可以是1或2 G=nx.Graph() G.add_节点('N1',n_类型=1) G.add_节点('N2',n_类型=1) G.add_节点('N3',n_类型=2) G.从([('N3','N1'),('N3','N2'))添加边 如果我使用NetworkX中的nx.average_neighbor_degree(G)函数,我会得到以下结果 {'N1': 2.0, 'N2': 2.0, 'N3': 1.0} 然而,我想得到的平均邻居度只考虑一

在我的图中,节点有一个属性,告诉我节点的类型可以是1或2

G=nx.Graph()
G.add_节点('N1',n_类型=1)
G.add_节点('N2',n_类型=1)
G.add_节点('N3',n_类型=2)
G.从([('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的邻居的节点,并且其邻居的平均值为度(N1)+度(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}