将igraph邻接矩阵转换为numpy数组

时间:2015-02-02 12:21:42

标签: python numpy igraph

写作

import igraph
g = igraph.Graph()
g.add_vertices(6)
g.add_edges([(0,1),(0,3),(0,4),(0,5),(1,2),(2,4),(2,5),(3,0),(3,2),(3,5),(4,5),(3,3)])
A=g.get_adjacency()

我得到了图g的邻接矩阵,作为Matrix对象。我想通过使用例如numpy.linalg.eigvals()来计算其特征值。此方法将numpy数组对象作为参数。 如何将Matrix对象转换为numpy数组对象? 我尝试使用

X=numpy.matrix(A)

但它产生了两种混合物,无法计算特征值。

2 个答案:

答案 0 :(得分:9)

根据the documentation of iGraph's matrix class,您可以将数据作为列表列表检索,然后轻松转换为numpy ndarray:

A = g.get_adjacency()
A = np.array(A.data)

答案 1 :(得分:0)

不完全是您之后的答案,但是这里有如何使用networkx(igraph的选项在下面 - 我认为):

import networkx as nx
G= nx.Graph()
G.add_edges_from([(0,1),(0,3),(0,4),(0,5),(1,2),(2,4),(2,5),(3,0),(3,2),(3,5),(4,5),(3,3)])
A=nx.adjacency_matrix(G)  #by default A is sparse

import numpy as np
np.linalg.eig(A.todense())

我没有igraph,所以不确定类似的.todense()是否适用于它返回的Matrix类型。

修改我看到了一些建议

numpy.array(list(g.get_adjacency()))

可能会使用igraph完成您的操作。我没有igraph,所以无法测试。如果有效,请告诉我。 (但无论如何都要考虑networkx;))

重新编辑我认为Oliver的解决方案更清晰。但我仍然想留下网络版本和其他igraph方法让其他人看到。