2014-09-22 66 views
0

有沒有一種方法可以用Python中的Igraph來計算(最終繪製)文中描述的圖的特徵值譜?使用Igraph計算圖的特徵值譜

http://lthiwww.epfl.ch/~leveque/Projects/barabasi_al.pdf

如果是的話,需要使用哪些功能?如果不是,有什麼好的替代方法?

+0

是不是隻是將圖轉換成鄰接矩陣,然後計算矩陣的特徵值? – Bitwise 2014-09-22 18:25:49

+0

可能的是,我看到網絡有一個功能可以做到,但它確實會過度殺傷。然後我會檢查numpy。謝謝。 – Rodolphe 2014-09-22 18:27:41

回答

2

好了,我想通了,嗷嗷只與IGRAPH做到這一點:

import numpy.linalg 
from igraph import * 
import random 
import numpy as np 
import time 

nbr_noeuds = 50 
dens = .2 

p=random.uniform(dens,dens) 
G = Graph.Erdos_Renyi(nbr_noeuds, p, directed=False, loops=False) 

t0 = time.time() 
L = G.laplacian(normalized=True) 
e = numpy.linalg.eigvals(L) 
print time.time()-t0 

和計算太多速度更快,打印輸出爲0.0009

+1

請注意,圖的* laplacian *矩陣與* adjacency *矩陣不同,但它很容易在兩者之間進行轉換(http://en.wikipedia.org/wiki/Laplacian_matrix)。你提到的論文使用* adjacency *矩陣的特徵值,而不是* laplacian *矩陣的特徵值。 – Bitwise 2014-09-25 14:27:15

+0

哦...感謝您的評論! – Rodolphe 2014-09-25 14:36:37

1

更簡單,可能更快,這樣

In [1]: import networkx as nx 

In [2]: from numpy.linalg import eigvals 

In [3]: %timeit eigvals(nx.normalized_laplacian_matrix(nx.fast_gnp_random_graph(50,0.2)).A) 
100 loops, best of 3: 3.13 ms per loop 
+0

謝謝!問題是,我有一個igraph圖開始,轉換需要一段時間,我認爲... – Rodolphe 2014-09-23 17:28:35