【Python】networkx中如何获取图的邻接矩阵

需要调取networkx中graph实例的邻接矩阵,搜“network 邻接矩阵”没有迅速找到解决方案。我写一个吧。

错误获取:

networkx中有个adjacency_matrix()函数,得到的邻接表看形状虽然是N*N,但是打印出来会发现是这个格式:

  (0, 1)    1
  (0, 30)    1
  (0, 33)    1
  (0, 99)    1

第一列是源头和终止节点,第二列是权重。

但是,如果你下列语句遍历,是会报错的:ValueError: not enough values to unpack (expected 2, got 1)

# 错误示范

for (x,y), w in nx.adjacency_matrix(G):

    print(x, y, w)

正确获取:

import networkx as nx
import numpy as np
A=np.array(nx.adjacency_matrix(G).todense())

转换为numpy矩阵是因为原始的格式不支持A[i][j]形式的索引。 

成功得到邻接矩阵,解决!

[[0 0 0 ... 0 0 1]
 [0 0 1 ... 0 0 0]
 [0 1 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 1]
 [1 0 0 ... 0 1 0]]

 

  • 24
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: networkx是一种Python语言的论分析工具包,它支持多种论算法和数据结构的实现。对于邻接矩阵networkx提供了一个to_numpy_matrix()函数,可以将转化为邻接矩阵形式的Numpy数组。该函数还可以通过参数来指定矩阵的数据类型、权重等信息。同时,networkx还提供了from_numpy_matrix()函数,可以将Numpy数组转化为形式的表示,从而方便进行的可视化和分析。 ### 回答2: networkx是一个用于创建、操作和研究复杂网络的Python库。邻接矩阵networkx表示的一种方式。 邻接矩阵是一个二维数组,用于表示一个节点之间的连接关系。矩阵的每一个元素表示节点之间的连接情况,如果两个节点之间有连接,则对应的元素为1;如果两个节点之间没有连接,则对应的元素为0。 通过使用networkx库,我们可以方便地将邻接矩阵表示为一个。在networkx,我们使用nx.Graph()函数创建一个对象,然后可以使用add_node()方法和add_edge()方法来添加节点和边。 要将邻接矩阵转换为,我们可以使用from_numpy_matrix()函数。这个函数接受一个二维矩阵作为输入,并返回一个对象。这个函数会根据邻接矩阵元素的值来创建节点和边。 以下是一个简单的示例: ```python import networkx as nx import numpy as np adj_matrix = np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]]) graph = nx.from_numpy_matrix(adj_matrix) print(graph.nodes()) # 输出节点列表 print(graph.edges()) # 输出边列表 ``` 输出结果为: ``` [0, 1, 2] [(0, 1), (1, 2)] ``` 这个例子,我们创建了一个3个节点的,节点之间的连接关系由邻接矩阵定义。输出结果显示了节点和边的信息。 通过使用networkx库和邻接矩阵,我们可以方便地处理和分析复杂网络结构。 ### 回答3: networkx是用于创建、操作和研究复杂网络结构的Python库。邻接矩阵是一种常用的表示形结构的方法,其矩阵的每个元素表示一个边的存在与否。 在networkx,可以使用邻接矩阵来表示形的结构。邻接矩阵是一个二维数组,其行和列分别表示的节点,而数组的元素表示节点之间的连接。 在创建邻接矩阵时,需要先创建一个空的矩阵,然后根据的边来填充矩阵。矩阵的行和列的索引对应于节点的编号,而矩阵的元素表示节点之间是否存在边。如果两个节点之间存在边,则将对应矩阵元素设置为1,反之则设置为0。 使用networkx库创建邻接矩阵的示例代码如下: ```python import networkx as nx import numpy as np # 创建一个有向 G = nx.DiGraph() G.add_nodes_from([1, 2, 3, 4]) G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 1)]) # 获取节点列表 nodes = list(G.nodes()) # 创建邻接矩阵 adj_matrix = np.zeros((len(nodes), len(nodes))) # 根据边的信息填充邻接矩阵 for edge in G.edges(): adj_matrix[nodes.index(edge[0])][nodes.index(edge[1])] = 1 print(adj_matrix) ``` 上述代码创建了一个有向,并通过邻接矩阵的方式表示了的结构。最终打印出的邻接矩阵表示了节点之间的连接情况。 邻接矩阵在网络分析被广泛使用,可以用于计算的相关特征,如节点度、聚类系数等。它还可以用于可视化形,并对的结构进行分析和预测。因此,邻接矩阵在网络分析领域具有重要的应用价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值