我在networkx中使用python。我测试了功能adjacency_matrix,但我无法理解某些结果。例如:

import networkx as nx
import numpy as np

g = nx.Graph()
g.add_nodes_from([1,2,3])
g.add_edges_from([[1,2],[2,3],[1,3]])
adj = nx.adjacency_matrix(g)
print adj.todense()
# [[0 1 1]
#  [1 0 1]
#  [1 1 0]]
print adj.__dict__
# {'indices': array([1, 2, 0, 2, 0, 1]), 'indptr': array([0, 2, 4, 6]), 'maxprint'
# : 50, '_shape': (3, 3), 'data': array([1, 1, 1, 1, 1, 1])}


print adj.__dict__的结果中,indicesindptr代表什么?我认为它们是与data属性一起用于重建邻接矩阵的关键信息。但是我无法弄清楚它是如何实现的。

谢谢大家的帮助!

最佳答案

adj给出的nx.adjacency_matrix是邻接矩阵的compressed sparse row矩阵格式。

压缩格式,


  用三个(一维)数组表示矩阵M,三个数组分别包含非零值,行范围和列索引。


在您的情况下,adj.indices是一维(numpy)数组,具有邻接矩阵的非零值的索引。与adj.indptr一起,您可以知道矩阵中非零值的确切位置。根据定义adj.indptr[0] == 0adj.indptr[i] == adj.indptr[i-1] + number of nonzero values at row idata属性引用非零值,在您的情况下,它们均为1。

关于python - 如何解释networkx.adjacency_matrix中的indptr?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45005793/

10-12 23:53