使用Python的NetworkX生成指定节点邻接矩阵的问题求助
问题解决:生成预期的邻接矩阵与节点图
问题分析
你的代码核心问题在于加边逻辑完全不匹配N=2的场景:
- 循环中
u的取值为0和1,全部进入第一个条件分支u % (2 * N) < N,但计算出的v值(如u-2*N、u-N)均为负数,对应的节点不存在,因此没有任何边被添加,导致邻接矩阵全为0,节点图是孤立节点。 - 节点编号使用
u+1,生成的是节点1、2,和你提到的节点0、1有偏差,但这不是核心问题。
修正代码
针对N=2的场景,直接简化逻辑生成预期的相连节点与邻接矩阵:
import networkx as nx N = 2 # 生成符合预期图的节点位置(左右排列) def pos(): yield (0, 0) yield (1, 0) G = nx.Graph() it_pos = pos() # 添加节点0、1 for u in range(N): G.add_node(u, pos=next(it_pos)) # 添加节点间的边(符合预期图的连接) G.add_edge(0, 1) # 绘制可视化图 nx.draw(G, nx.get_node_attributes(G, 'pos'), with_labels=True, font_weight='bold') # 获取邻接矩阵 A = nx.adjacency_matrix(G).todense() print(A)
输出结果
运行后得到的邻接矩阵为:
matrix([[0, 1], [1, 0]])
节点可视化图会显示两个相连的节点(0和1),与预期一致。
扩展说明
如果你的“特定编号规则”是针对更大规模的网络(而非仅N=2),需要明确规则细节后调整条件分支中的v计算逻辑,确保生成的v对应已存在的节点。当前代码中的条件判断逻辑更适合周期性扩展的大型网络,但不适用于N=2的基础场景。
内容的提问来源于stack exchange,提问作者AEinstein
相关产品推荐
相关产品推荐

