zoukankan      html  css  js  c++  java
  • networkX用法整

    无向图,有向图,加权图等例子代码 【http://www.cnblogs.com/kaituorensheng/p/5423131.html#_label1】
    数据分析学习笔记(三)-NetworkX的使用 【http://baiyejianxin.iteye.com/blog/1764048】
    官网文档 【https://networkx.readthedocs.io/en/stable/overview.html】http://networkx.github.io/documentation/networkx-1.7/index.html】
    NetworkX使用笔记:读入外部文件并转换成各种格式 【http://sparkandshine.net/networkx-use-notes-read-external-file-convert-to-other-formats/】
    ————————————————————————————————-

    1.安装

    安装networkx之前要安装画图工具matplotlib,以及矩阵运算工具numpy,于是我们执行:
    pip install numpy
    pip install matplotlib
    pip install networkx

    2.使用

    networkx的英文版说明可以在其官方网站上下载得到,写的简单易懂。
    http://networkx.github.io/documentation/latest/reference/index.html
    这里记录下一些简单的建图方法。
    在networkx中,图以对象的形式提供借口。
    在图对象中,还有点,边等也是以对象形式提供,画图则调用matplotlib的函数完成。

    建图

    networkx可以建立简单无向图graph,有向图digraph,可重复边的multi-graph。

    import networkx as nx
    G=nx.Graph()
    D=nx.DiGraph()
    M=nx.MultiGraph()

    这里的点可以是任意可区分的对象(hashable),比如数字,字符串,对象等。

    G.add_node(1)
    G.add_node('first_node’) #这里用一个对象多为key来唯一区别一个点 #我们还能够用一个列表来批量加入点
    G.add_nodes_from([1,2,3]) #还可以用一个图对象作为点,嵌入到其他图中
    G.add_node(D) #这里D作为一个点的key #或者把一个图的所有点赋予另一个图
    G.add_nodes_from(D) #这里返回D的所有点,赋予G #与加入相同的传递方法,我们也可以删除点
    G.remove_node(1)
    G.remove_nodes_from([1,2,3])

    这里的边可以使用两个单独的对象作为输入

    G.add_edge(1,2) #表示1,2之间有一条边。 #如果不存在点1,2,则会自动加入点集合。 #或者以元组的形式作为输入
    e=(1,2)
    G.add_edge(e) #这里的代表吧元组解包(unpack),当作一个个的值扔到函数中去。 #如果不解包,等价于 #G.add_edge(e)=G.add_edge((1,2))与参数传递的方式不符。 #类似的,我们还可以使用包含元组的列表来传递参数
    G.add_edges_from([(1,2),(2,3)]) #我们还可以报一个图的边赋予另一个图
    G.add_edges_from(H) #删除
    G.remove_edge(1,2)
    G.remove_edges_from([(1,2),(2,3)])

    访问

    node_list = G.nodes()
    edge_list = G.edges() #可以返回包含点与边的列表
    node = G.node[‘first_node’] #如上根据key返回点
    edge = G.edge['first_node’]['second_node’] #同样的方法,返回两个key之间的边

    属性

    我们可以给图,点,边赋予各种属性,最简单的就是权值属性

    G.add_node(1,time='5pm’) #在添加时跟上属性
    G.add_nodes_from([1,2,3],time='5pm’) #批量添加点是,跟上统一的属性
    G.add_nodes_from([(3,{'time’:'5pm’}), (4,{'time’:'4pm’})]) #或者写成元组列表[(key,dict),(key,dict)]的形式
    G.node1['time’] #根据字典key访问属性值。

    给边添加属性也类似

    G.add_edge(1,2,time='3am’)
    G.add_edges_from([(1,2,{'time’='5pm’}),(2,3,{'time’=3am})]) #批量赋予属性
    G.edge1[2][‘time’] #访问

    我们还可以使用特定的函数批量返回属性,如

    time = nx.get_edge_attributes(G,'time’) #返回得到以元组为key,time属性为值得一个字典
    time[(1,2)]

    图算法

    nx.connected_components(G) #返回列表形式的G的全连通分量,每个分量一个子列表

    类似的,networkx还提供各种图算法,具体可见官方文档。
    画图

    nx.draw(G) #画出图G
    matplotlib.show() #显示出来
    ————————————————————————————————-

    import networkx as nx
    import matplotlib.pyplot as plt

    计算1:求无向图的任意两点间的最短路径

    G = nx.Graph()
    G.add_edges_from([(1,2),(1,3),(1,4),(1,5),(4,5),(4,6),(5,6)])
    path = nx.all_pairs_shortest_path(G)
    print(path1)

    计算2:求出图中在环上的点

    G = nx.Graph()
    G.add_edges_from([(1,2),(1,3),(1,4),(1,5),(4,5),(4,6),(5,6)])
    path = nx.all_pairs_shortest_path(G)
    print(path1)

    path=nx.all_pairs_shortest_path(G) #调用多源最短路径算法,计算图G所有节点间的最短路径
    print(path0[2]) #输出节点0、2之间的最短路径序列: [0, 1, 2]

  • 相关阅读:
    Delphi的IDE的快捷键
    XE4 There is no overloaded version GetTextExtentPoint32A
    正确安装DevExpress.ExpressQuantumGrid.Suite For D7
    按比例缩小图片(80分)
    Delphi 2010 新增功能之: TWICImage 类[3]
    Delphi image 等比例缩小
    delphi 图片加水印源代码
    DELPHI窗体属性
    delphi透明panel组件或者制作方法
    利用VB、Delphi轻松实现图像漫游
  • 原文地址:https://www.cnblogs.com/jonky/p/10154063.html
Copyright © 2011-2022 走看看