如何用Numpy高效实现扩展后双向图的节点间边初始化?
问题翻译
假设我们需要为3个节点构成的完全无向图(无自环)初始化双向边,可通过以下代码实现:
import numpy as np node_num = 3 graph = np.ones([node_num, node_num]) - np.eye(node_num)
现在对该图进行扩展,扩展后的图为4个节点构成的完全二分图K2,2(两组各2个节点,组内节点无连接,组间节点两两双向连接),请问实现该扩展图边初始化的简单高效代码是什么?
解决方案
可以利用NumPy的切片赋值快速构造邻接矩阵,代码如下:
import numpy as np node_num = 4 graph = np.zeros((node_num, node_num), dtype=int) # 前2个节点与后2个节点互相建立双向边 graph[:2, 2:] = 1 graph[2:, :2] = 1
代码说明
- 先创建一个4×4的全零矩阵,默认所有节点间无连接
- 通过切片
[:2, 2:]选中前2行、后2列的区域并赋值为1,代表前两个节点到后两个节点的单向边 - 再通过
[2:, :2]选中后2行、前2列的区域赋值为1,完成双向边的初始化 - 全程用NumPy的向量化操作,比循环实现更高效,代码也更简洁直观
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

