python - 使用 igraph for python 的共同邻居和优先依附分数矩阵

标签 python social-networking igraph

有没有一种有效的方法来计算python中共同邻居(CC)和优先依附(PA)的矩阵分数?我正在使用 igraph 计算其他方法的得分矩阵,例如 jaccard 系数 (Graph.similarity_jaccard())、dice (Graph.similarity_dice) 和 adamic/adar (Graph.similarity_inverse_log_weighted()),但我还没有找到任何函数计算 CC 和 PA 的得分矩阵。

目前我在做:

#Preferential attachment score between nodes i and j in a graph g
len(g.neighbors(i))*len(g.neighbors(j))

#Common neighbors score between nodes i and j in a graph g
len(g.neighbors(i) and g.neighbors(j))

但我必须对网络中的所有边 (i,j) 执行此操作,在我的例子中,它非常大。

如果有人知道生成我正在寻找的此类分数矩阵的任何数学矩阵运算,我也将不胜感激。

最佳答案

igraph 中没有针对此的直接函数。但是,请注意 len(g.neighbors(i)) 只是顶点 i 的度数,因此您可以调用 g.degree(),使用 NumPy 将其视为一维矩阵,然后将其与自己的转置 s.t 相乘。列向量从右边乘以行向量。这为您提供了优先依恋分数矩阵:

from numpy import matrix
d = matrix(g.degree())
pref_score_matrix = d.T*d

公共(public)邻居分数使用矩阵表示法比较棘手,如果您的图形非常大(即使只有 2000 个顶点,您也会有一个包含 400 万个元素的矩阵),无论如何我都不会使用矩阵。我会简单地为列表中的所有可能值缓存 g.neighbors(i) 的集合表示,然后使用它来计算公共(public)邻居分数,因为集合可以有效地相交:

neisets = [set(g.neighbors(i)) for i in xrange(g.vcount())]
for v1, v2 in g.get_edgelist():
    common_neis = neisets[v1].intersection(neisets[v2])
    print "%d --> %d: %d" % (v1, v2, len(common_neis))

如果你真的想坚持使用矩阵,你可以使用 zeros 函数构造一个 n × n 矩阵,仅由零组成NumPy 然后遍历顶点一次。获取顶点 v 的所有邻居,并注意 v 的任何 邻居都有一个共同的邻居:v 本身:

from itertools import combinations
from numpy import zeros

n = g.vcount()
common_neis = zeros(n, n)
for v in xrange(g.vcount()):
    neis = g.neighbors(v)
    for u, w in combinations(neis, 2):
        # v is a common neighbor of u and w
        common_neis[u, w] += 1
        common_neis[w, u] += 1

关于python - 使用 igraph for python 的共同邻居和优先依附分数矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6632445/

相关文章:

javascript - 从 VKontakte 中的 javascript API 获取电子邮件

php - 当 friend 在 PHP/MySQL 应用程序中忽略某人时,我应该如何处理?

python - 在 main.py/understanding 范围内调用方法

python - Sage/Python 中的联合

python,从zip文件制作一个windows msi安装程序

python - 使用 python igraph 绘制社区

r - 在 R 中绘制 igraph 对象时控制轴标签大小

Python 3.6 : tensorflow install on windows failed with TypeError: stat: path should be string, 字节,os.PathLike 或整数,而不是 NoneType

ios - 使用 Parse 制作社交媒体应用程序或开发我自己的后端?

r - 三列图