2014-09-22 2 views
0

Есть ли способ, с помощью Igraph в Python, вычислить (чтобы в конечном итоге построить) спектр собственных значений графика, как описано в статье?Вычисление спектра собственных значений графика с помощью Igraph

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

Если да, то какие функции нужно использовать? Если нет, то какие хорошие альтернативные методы?

+0

Разве это не просто преобразование графа в матрицу смежности, а затем вычисление собственных значений матрицы? – Bitwise

+0

Мог быть, я видел, что у сети есть функция, чтобы сделать это, но это действительно не слишком. Тогда я буду проверять numpy. Благодарю. – Rodolphe

ответ

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

Заметим, что матрица * лапласиана * графа отличается от матрицы * смежности *, но легко преобразовать между ними (http://en.wikipedia.org/wiki/Laplacian_matrix). В упомянутой работе используются собственные значения матрицы * смежности *, а не матрицы * лапласиана *. – Bitwise

+0

Ох ... спасибо за комментарий! – Rodolphe

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

Спасибо! Проблема в том, что у меня есть графический график, чтобы начать, переход занимает некоторое время, я думаю ... – Rodolphe

Смежные вопросы