Python 如何为整个网络的特征向量集中创建networkx函数?(弗里曼)

Python 如何为整个网络的特征向量集中创建networkx函数?(弗里曼),python,r,networking,networkx,sna,Python,R,Networking,Networkx,Sna,问题是:如何使用networkx计算图形的特征向量集中 如中所示,不是针对单个节点,而是针对用于比较节点的整个图形,使用Freeman的方法进行比较 我需要比较许多不同的图表,我希望使用四种不同的中心度度量来比较它们: 亲密 中间性 度 特征向量 目前networkx没有任何计算整个网络集中度的函数-所有函数都返回每个节点的中心度字典 请注意,中心化是关于网络中中心性的分布 我写了一个函数,可以计算前三个网络的中心度,但我不知道如何计算特征向量中心度 理论上,它应该是最大中心度-每个节点的中心度

问题是:如何使用networkx计算图形的特征向量集中

如中所示,不是针对单个节点,而是针对用于比较节点的整个图形,使用Freeman的方法进行比较

我需要比较许多不同的图表,我希望使用四种不同的中心度度量来比较它们:

亲密 中间性 度 特征向量 目前networkx没有任何计算整个网络集中度的函数-所有函数都返回每个节点的中心度字典

请注意,中心化是关于网络中中心性的分布

我写了一个函数,可以计算前三个网络的中心度,但我不知道如何计算特征向量中心度

理论上,它应该是最大中心度-每个节点的中心度除以n大小网络的理论最大值

我能找到的最接近于计算特征向量中心性的方法是在幻灯片32上看到这方面的理论,它看起来像这样:

Ce<-function(Y)
{
    n<-nrow(Y)
    e<-evecc(Y)
    Y.sgn<-matrix(0,n,n) ; Y.sgn[1,-1]<-1 ; Y.sgn<-Y.sgn+t(Y.sgn)
    e.sgn<-evecc(Y.sgn)
    sum(max(e)-e)/ sum(max(e.sgn)-e.sgn)
}
请注意,在将密切度和中间度输入此函数时,不应将其规范化


更新:在回答之后,代码已经完成并发布为供其他人使用的代码。

为了清楚起见,您正在寻找网络的特征向量集中。中心性是一个节点级别的索引,仅针对网络中的节点定义,因为考虑到这些节点的度量,这是有意义的。我记得,弗里曼称集中为图形中心,但术语集中已被取代,因此评论中可能出现混淆

特征向量集中的理论最大值是两个节点之间只有一条边的相同大小的网络。在有向网络的情况下,这是n-1。在无向网络的情况下,它是sqrt2/2*n-2。看

因此,考虑到这一点:

from math import sqrt
if (c_type=="eigen"):
    c_denominator = sqrt(2)/2 * (n_val - 2)
或:


…这里有问题吗?问题是:如何使用networkx计算整个网络的特征向量中心度?没有内置函数来实现这一点,我在web上的任何地方都找不到实现这一点的代码。该代码展示了如何对其他类型的中心性执行此操作的示例,但我无法计算特征向量。问题代码中列出的特征向量中心分母不正确。你能解释一下你所说的整个网络特征向量中心是什么意思吗?对于给定的网络,您是否只需要一个号码?我想不出这会是什么。这个问题将受益于一个简单的例子,特别是解释预期输出是什么。请参阅下面的评论-问题标题已修改为指集中而不是中心。谢谢!这是一个很好的答案。你说得对,我就是集中化after@paqmo,你的答案真的超过了10分:我想知道有没有简单的pageRank集中计算格式?不确定。需要计算pagerank的理论最大值。既然它是特征向量中心性的一个变体,但有方向性,那么理论最大值可能是相同的吗?
from math import sqrt
if (c_type=="eigen"):
    c_denominator = sqrt(2)/2 * (n_val - 2)
if (c_type=="eigen"):
    c_denominator = n_val - 1