Graph 如何计算加权网络中的邻域重叠?

Graph 如何计算加权网络中的邻域重叠?,graph,networkx,Graph,Networkx,如何计算加权图中两个节点(I,j)之间的邻域重叠 “…我们将连接A和B的边的邻域重叠定义为比率:(同时是A和B的邻居的节点数)/(至少是A或B中一个邻居的节点数),其中在分母中,我们不计算A或B本身(即使A是B的邻居,B是A的邻居)。” networkx有一个内置函数,用于查找图形中两个节点的公共邻居:。现在我们只需要找到与A或B相邻的节点数 | N(u) ⋃ N(v) | = |N(u)| + |N(v)| - | N(u) ⋂ N(v)| 其中N(u)是u的邻域集。因为我们在分母中不计算A

如何计算加权图中两个节点(I,j)之间的邻域重叠


“…我们将连接A和B的边的邻域重叠定义为比率:(同时是A和B的邻居的节点数)/(至少是A或B中一个邻居的节点数),其中在分母中,我们不计算A或B本身(即使A是B的邻居,B是A的邻居)。”


networkx
有一个内置函数,用于查找图形中两个节点的公共邻居:。现在我们只需要找到与A或B相邻的节点数

| N(u) ⋃ N(v) | = |N(u)| + |N(v)| - | N(u) ⋂ N(v)|
其中
N(u)
u
的邻域集。因为我们在分母中不计算A或B,所以我们需要从
|N(u)中减去2⋃ N(v)|

def邻域重叠(g,u,v):
n_公共_nbrs=len(集合(nx.公共_邻域(g,u,v)))
n_join_nbrs=g.degree(u)+g.degree(v)-n_common_nbrs-2
返回n_普通编号/n_加入编号

但是,您仍然需要确定分母为0时会发生什么情况,即当节点A和B构成图形的连接组件时。

我知道问题的标签是
networkx
,但由于这是Google上第一个弹出的东西,因此在
igraph
上,函数将是

neighborhood_overlap <- function(g, node1, node2)
{
  nh1 = neighborhood(graph=g, order=1, nodes=node1)[[1]]
  nh2 = neighborhood(graph=g, order=1, nodes=node2)[[1]]
  common = intersect(nh1, nh2)
  commonl = length(common)
  # | N(u) ⋃ N(v) | = |N(u)| + |N(v)| - | N(u) ⋂ N(v)|
  union = degree(net_vc, v=node1) + degree(net_vc, v=node2) - commonl - 2
  return(commonl/union)
}

邻域重叠什么是邻域重叠?到目前为止,您尝试了什么?”…我们将连接A和B的边的邻域重叠定义为比率:(同时是A和B的邻居的节点数)/(至少是A或B中一个邻居的节点数),其中在分母中,我们不计算A或B本身(即使A是B的邻居,B是A的邻居)."