2015-12-11 87 views
0

如何查找圖形中頂點的三角形數量?Python Igraph:查找每個頂點的三角形數量

讓我說我有一個圖g。我可以使用這個命令計算每個頂點的度數

g.vs.degree() 

它會返回一個數字列表。有沒有類似的方法來計算將返回列表的三角形的數量?

以前我可以使用Gephi計算,但現在我已經轉移到了igraph。


更新1

通過使用cliques,我會得到這樣的事情

import igraph as ig 
g = ig.Graph.Famous('Krackhardt_Kite') 
g.cliques(min=3,max=3) 

[(0, 1, 3), 
(0, 2, 3), 
(0, 2, 5), 
(0, 3, 5), 
(1, 3, 4), 
(1, 3, 6), 
(1, 4, 6), 
(2, 3, 5), 
(3, 4, 6), 
(3, 5, 6), 
(5, 6, 7)] 

所以三角形的數量應該是返回這樣的(基於Gephi)

[4,4,3,8,3,5,5,1,0] 

那麼igraph provi德這些函數來計算三角形的數量?

回答

0

可能不是最有效的,但是這將工作:

def triangles(g): 
    cliques = g.cliques(min=3, max=3) 
    result = [0] * g.vcount() 
    for i, j, k in cliques: 
     result[i] += 1 
     result[j] += 1 
     result[k] += 1 
    return result 

不使用的另一個變種cliques()

from itertools import combinations 

def triangles(g): 
    result = [0] * g.vcount() 
    adjlist = [set(neis) for neis in g.get_adjlist()] 
    for vertex, neis in enumerate(adjlist): 
     for nei1, nei2 in combinations(neis, 2): 
      if nei1 in adjlist[nei2]: 
       result[vertex] += 1 
    return result 

我沒有做任何的基準所以這一塊可能會更快或比前一個慢 - 我不知道。

+0

是的,我看到這種方式之前,由Csardi發佈..但是沒有那麼高效的bcos需要去派系功能第一..但如果沒有其他方式,我想需要使用這種方式..它的方式大量的網絡時間 – Mrye

+0

我添加了另一個不依賴'cliques()'的變體。 –

相關問題