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

turning igraph adjacency matrix into numpy array

通过写作

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)

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

不完全是您想要的答案,但这是使用 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 类型returns。

编辑 我看到一些建议

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

可能会用 igraph 做你想做的事。我没有 igraph,所以无法测试。请让我知道它是否有效。 (但无论如何都要考虑 networkx ;))

重新编辑 我认为 Oliver 的解决方案更清晰。但是我还是想把networkx版本和这个其他的igraph方法留给其他人看看。

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

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