通过写作
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的邻接矩阵,作为矩阵对象。我想用numpy.linalg.eigvals()
来计算它的特征值。此方法以numpy数组对象作为参数。如何将矩阵对象转换为numpy数组对象?我试着用
X=numpy.matrix(A)
但它产生了两种特征值的混合,无法计算出特征值。
发布于 2015-02-02 04:49:02
根据the documentation of iGraph's matrix class,您可以以列表的形式检索数据,然后轻松地转换为numpy ndarray:
A = g.get_adjacency()
A = np.array(A.data)
发布于 2015-02-02 04:38:53
这并不完全是你想要的答案,但下面是如何使用networkx来实现它的方法(下面是带有option的选项--我认为):
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())
我没有it,所以不确定类似的.todense()是否适用于它返回的矩阵类型。
编辑我看到一些建议
numpy.array(list(g.get_adjacency()))
可能会做你想要的照片。我没有照片,所以不能测试。如果有用请告诉我。(但无论如何考虑一下网络;)
重新编辑我认为奥利弗的解决方案更干净。但是我仍然想把networkx版本和另一个igraph方法留给其他人去看。
https://stackoverflow.com/questions/28277672
复制