将 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)
通过写作
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)