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

3
在我的图中,节点具有一个属性,告诉我节点的类型可以是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

您有什么建议吗?

1个回答

0
通过检查源代码并稍作调整,我得出了这个结果。希望它能有所帮助。
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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接