zoukankan      html  css  js  c++  java
  • NetworkX 图网络处理工具包

    简单介绍

    NetworkX is a Python package for the creation, manipulation, and study of the structure, dynamics, and functions of complex networks.

    这个工具包对于图网络的处理非常有用,涵盖了很多算法,用法也非常友好。这里也贴出几个常用链接:

    建议直接下一份pdf放着随时查。接下来直接说常规用法,首先:

    import networkx as nx
    
    Graph 创建

    既然是处理网络,首先需要创建一个图对象,类型有:

    G = nx.Graph()          # 无向图
    G = nx.DiGraph()        # 有向图
    G = nx.MultiGraph()     # 多重无向图
    G = nx.MultiDigraph()   # 多重有向图
    G.clear()               # 清空图
    

    接着,需要给图添加内容,比如加点,加边:

    G.add_edge(1, 2)             # default edge data=1
    G.add_edge(2, 3, weight=0.9) # specify edge data
    # 如果是边有许多的权,比如有长度和宽度的属性,那么:
    G.add_edge(n1, n2, length=2, width=3)
    
    elist = [(1, 2), (2, 3), (1, 4), (4, 2)]
    G.add_edges_from(elist)
    elist = [('a', 'b', 5.0), ('b', 'c', 3.0), ('a', 'c', 1.0), ('c', 'd', 7.3)]
    G.add_weighted_edges_from(elist)
    
    # 如果给结点的名称是其它符号,想离散化成从x开始的数字标记,那么:
    G = nx.convert_node_labels_to_integers(G, first_label=x)
    
    Graph 信息的获取
    nx.info(G) # 图信息的概览
    G.number_of_nodes()
    G.number_of_edges()
    # 获取和节点idx连接的边的attr属性之和
    G.in_degree(idx, weight='attr')
    
    # 如果想知道某个结点相连的某个边权之和:
    DG.degree(nodeIdx, weight='weightName')
    
    # 获取结点或者边的属性集合,返回的是元组的列表
    G.nodes.data('attrName')
    G.edges.data('attrName')
    
    # 获取n1 n2的边的length权重,那么:
    G[n1][n2]['length']
    # 如果是有重边的图,选择n1,n2第一条边的length权重,则:
    G[n1][n2][0]['length']
    
    # 获取n1结点的所有邻居
    nx.all_neighbors(G, n1)
    
    # 判断图中n1到n2是否存在路径
    nx.has_path(G, n1, n2)
    # 根据一个结点的list,获取子图
    subG = nx.subgraph(G, nodeList)
    
    Graph 其他内置算法
    # 最短路算法 返回最短路的路径列表
    nx.shortest_path(G, n1, n2, method='dijkstra')
    # 以及各种图的算法,比如流,割等等等等,大家可以看文档探索下
    
    Graph 的绘制
    # 最简单的绘制
    import matplotlib.pyplot as plt
    nx.draw(G)
    plt.show()
    
    # 设置其他乱七八糟的参数
    nx.draw(G,
        with_labels=True,
        pos = nx.sprint_layout(G),
        node_color=color_list,
        edge_color='k',
        node_size=100,
        node_shape='o',
        linewidths=2,
        width=1.0,
        alpha=0.55,
        style='solid',
        font_size=9,
        font_color='k'
    )
    
  • 相关阅读:
    属性包装
    生成器
    迭代器
    深拷贝-浅拷贝
    装饰器-wrapper
    类别不均衡
    参数优化-学习曲线
    参数优化-验证曲线
    参数优化-API
    D. Number Of Permutations 符合条件的排列种类
  • 原文地址:https://www.cnblogs.com/Rosebud/p/10483560.html
Copyright © 2011-2022 走看看