You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于指定规则矩阵利用igraph构建有向网络?

用igraph实现带单向/双向关系的网络

1. 准备数据

先把题目中的邻接矩阵和节点名称对应好,用Python列表定义:

import igraph as ig

# 邻接矩阵:行/列依次对应节点A、B、C、D
adj_matrix = [
    [0, 2, 0, 0],  # A与B是双向关系
    [2, 0, 1, 0],  # B与A双向、B到C单向
    [0, 0, 0, 2],  # C与D双向
    [1, 0, 2, 0]   # D到A单向、D与C双向
]
nodes = ["A", "B", "C", "D"]

2. 生成边列表

遍历矩阵,根据数值生成对应类型的边:

edges = []
for i in range(len(nodes)):
    for j in range(len(nodes)):
        val = adj_matrix[i][j]
        if val == 1:
            # 单向边:行节点指向列节点
            edges.append((nodes[i], nodes[j]))
        elif val == 2:
            # 双向边:添加两个方向的边,确保箭头双向显示
            edges.append((nodes[i], nodes[j]))
            edges.append((nodes[j], nodes[i]))

3. 构建有向图并可视化

创建有向图对象,添加节点和边后绘图:

# 创建有向图(必须开启directed才能显示单向/双向箭头)
g = ig.Graph(directed=True)
g.add_vertices(nodes)
g.add_edges(edges)

# 配置可视化参数,让箭头和节点更清晰
visual_style = {
    "vertex_size": 35,
    "vertex_label": nodes,
    "vertex_label_size": 12,
    "edge_arrow_size": 0.8,
    "layout": g.layout("circle")  # 环形布局,也可替换为"kamada_kawai"等
}

# 绘制并展示图形
ig.plot(g, **visual_style)

关键说明

  • 必须创建有向图(directed=True),才能区分单向箭头和双向箭头
  • 双向关系通过添加两个方向的边实现,绘图时会自动显示双向箭头
  • 若想简化双向边的处理,也可先构建无向图再转为有向,但直接添加双向边更贴合题目对箭头展示的要求

内容的提问来源于stack exchange,提问作者Kolmogorovwannabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 05:16:00