• networkx学习记录


    networkx学习记录

    1. 创建图表

    创建一个空图

    import networkx as nx
    G = nx.Graph()
    
    • 1
    • 2

    此时如果报以下错误:
    在这里插入图片描述则注意文件名不能是:networkx.py,修改文件名就好了。

    2. 节点

    图G的增长可以通过添加节点来实现

    • 添加节点方式一:添加一个节点,节点名为100(注意不是添加了100个节点)
    G.add_node(100)
    
    • 1
    • 添加节点方式二:
    G.add_nodes_from([2, 3])
    
    • 1
    • 添加节点方式三:合并其他图节点
    H = nx.path_graph(10)
    G.add_nodes_from(H)
    
    • 1
    • 2

    G 现在包含 H 的节点作为 G 的节点(节点编号从0开始,到9结束)。
    相比之下,您可以将图形 H用作G中的节点。

    G.add_node(H)
    
    • 1

    图G现在包含H作为一个节点。图G现在包含H作为一个节点。 这种灵活性非常强大,因为它允许图形图形、文件图形、函数图形等等。

    简单示例:
    在这里插入图片描述

    3. 边

    也可以通过添加边来实现

    • 可以通过add_edge()一次添加一条边:指定的参数就是边所连接的两个节点
    G.add_edge(1, 2)
    
    • 1
    • 也可以通过元组的方式添加:
    e = (2, 3)
    G.add_edge(*e)  # unpack edge tuple*
    
    • 1
    • 2

    简单示例:
    在这里插入图片描述

    • 或者通过列表方式,同时添加多条边
    G.add_edges_from([(1, 2), (1, 3)])
    
    • 1

    简单示例:注意看对比
    在这里插入图片描述

    • 通过字符串添加
    G.add_edges_from([(1, 2), (1, 3)])
    G.add_node(1)
    G.add_edge(1, 2)
    G.add_node("spam")        # adds node "spam"
    G.add_nodes_from("spam")  # adds 4 nodes: 's', 'p', 'a', 'm'
    G.add_edge(3, 'm')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    补充:G.clear()会清除所有节点和边
    在这里插入图片描述

    4.检查图的元素

    G.number_of_nodes():图G中结点的数量
    G.number_of_edges():图G中边的数量
    G.nodes():图G中的节点的情况
    G.edges():图G中边的情况
    G.adj():某一结点的邻接节点情况
    G.degree():节点的度
    在这里插入图片描述
    G.edges()、G.degree()可以添加参数,具体的示例如下:

    print(G.edges([1, 'm']))
    print(G.degree([1, 'm']))
    
    • 1
    • 2

    5.从图中删除元素

    可以以与添加类似的方式从图中删除节点和边。
    使用方法:Graph.remove_node(),Graph.remove_nodes_from(),Graph.remove_edge()和Graph.remove_edges_from(),例如:

    G.remove_node(2)
    G.remove_nodes_from("spam")
    list(G.nodes)
    G.remove_edge(1, 3)
    
    • 1
    • 2
    • 3
    • 4

    6.使用图构造函数

    图形对象不必增量构建 - 数据指定图结构可以直接传递给各种构造函数图类。
    通过实例化其中一个图来创建图结构时类,可以指定多种格式的数据。

    import networkx as nx
    
    G = nx.Graph()
    G.add_edge(1, 2)
    H = nx.DiGraph(G)  # create a DiGraph using the connections from G
    print("edges:",list(H.edges()))
    edgelist = [(0, 1), (1, 2), (2, 3)]
    H = nx.Graph(edgelist)  # create a graph from an edge list
    print("edges:",list(H.edges()))
    adjacency_dict = {0: (1, 2), 1: (0, 2), 2: (0, 1)}
    H = nx.Graph(adjacency_dict)  # create a Graph dict mapping nodes to nbrs
    print("edges:",list(H.edges()))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    7.访问边和邻居

    除了视图G.edges和G.adj,使用下标符号可以访问边和邻居:

    G = nx.Graph([(1, 2, {"color": "yellow"})])
    G[1]  # same as G.adj[1]
    G[1][2]
    G.edges[1, 2]
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    如果边存在,还可以使用下标符号获取/设置边的属性:

    G.add_edge(1, 3)
    G[1][3]['color'] = "blue"
    G.edges[1, 2]['color'] = "red"
    G.edges[1, 2]
    
    • 1
    • 2
    • 3
    • 4

    所有(节点,邻接)对的快速检查是使用G.adjacency() G.adj.items()。请注意,对于无向图,邻接迭代会看到每条边两次。

    G = nx.Graph()
    G.add_weighted_edges_from([(1, 2, 0.125), (1, 3, 0.75), (2, 4, 1.2), (3, 4, 0.375)])
    for n, nbrs in G.adj.items():
        for nbr, eattr in nbrs.items():
            wt = eattr['weight']
            if wt < 0.5: print(f"({n}, {nbr}, {wt:.3})")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    使用 edge 属性可以方便地访问所有边:

    
    G = nx.Graph()
    G.add_weighted_edges_from([(1, 2, 0.125), (1, 3, 0.75), (2, 4, 1.2), (3, 4, 0.375)])
    for n, nbrs in G.adj.items():
        for nbr, eattr in nbrs.items():
            wt = eattr['weight']
            # if wt < 0.5: print(f"({n}, {nbr}, {wt:.3})")
    for (u, v, wt) in G.edges.data('weight'):
        if wt < 0.5:
            print(f"({u}, {v}, {wt:.3})")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    8.向图、节点和边添加属性

    诸如权重、标签、颜色或任何您喜欢的 Python 对象之类的属性,可以附加到图、节点或边。

    每个图、节点和边都可以在关联的属性字典(键必须是可散列的)。 默认情况下,这些是空的,但是可以使用 add_edge、add_node 或直接添加或更改属性操作名为“G.graph”、“G.nodes”和图形“G”的“G.edges”。

    • 图形属性
      创建新图形时分配图形属性:
    G = nx.Graph(day="Friday")
    G.graph
    
    • 1
    • 2

    修改属性:

    G.graph['day'] = "Monday"
    G.graph
    
    • 1
    • 2
    • 节点属性
      使用 add_node()、add_nodes_from() 或 G.nodes 添加节点属性:
    G.add_node(1, time='5pm')
    G.add_nodes_from([3], time='2pm')
    G.nodes[1]
    G.nodes[1]['room'] = 714
    G.nodes.data()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    注意:请注意,将节点添加到 G.nodes 不会将其添加到图形中,请使用G.add_node() 添加新节点。 缘也是如此。

    • 边缘属性
      使用 add_edge()、add_edges_from() 或下标符号添加/更改边属性:
    G.add_edge(1, 2, weight=4.7 )
    G.add_edges_from([(3, 4), (4, 5)], color='red')
    G.add_edges_from([(1, 2, {'color': 'blue'}), (2, 3, {'weight': 8})])
    G[1][2]['weight'] = 4.7
    G.edges[3, 4]['weight'] = 4.2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    特殊属性 weight 应该是数字,因为它被使用需要加权边的算法。

    9.有向图

    DiGraph 类提供特定的附加方法和属性到有向边,例如:DiGraph.out_edges、DiGraph.in_degree、DiGraph.predecessors、DiGraph.successors 等。
    为了让算法能够轻松地处理这两个类,有向版本的neighbors 等价于successors, degree 等价于in_degree 和 out_degree 。

    DG = nx.DiGraph()
    DG.add_weighted_edges_from([(1, 2, 0.5), (3, 1, 0.75)])
    DG.out_degree(1, weight='weight')
    DG.degree(1, weight='weight')
    print(list(DG.successors(3)))
    print(list(DG.neighbors(1)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    10. 绘制图形

    G = nx.petersen_graph()
    subax1 = plt.subplot(121)
    nx.draw(G, with_labels=True, font_weight='bold')
    subax2 = plt.subplot(122)
    nx.draw_shell(G, nlist=[range(5, 10), range(5)], with_labels=True, font_weight='normal')
    
    plt.show()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

  • 相关阅读:
    数仓总结题
    SAP 控制VA02修改客户地址是否同步修改参考关联的销售订单
    数据中心深度制冷联合解决方案登陆VMware云市场及VMware Explore 2022大会
    搭建微服务架构的电商平台系统
    mac安装 scala 详细教程(包含在 idea 上使用,以及scala插件安装)
    python web开发(四): Bootstrap
    Flink之Watermark水印、水位线
    网易云课堂-课程分析
    网站/顶会/工作组
    Go-zero从入门到精通(一)
  • 原文地址:https://blog.csdn.net/qq_41422448/article/details/127849152