写作
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)
但它产生了两种混合物,无法计算特征值。
答案 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方法让其他人看到。