目录

  • 一、前言
  • 二、图、结点与边的创建/删除
    • 2.1 图的创建
    • 2.2 添加结点
    • 2.3 添加边
    • 2.4 删除结点
    • 2.5 删除边
  • 三、图的相关计算

一、前言

NetworkX 是一个用于图计算的开源第三方库,常用如下缩写

import networkx as nx

二、图、结点与边的创建/删除

2.1 图的创建

NetworkX 提供了四种类型的图,如下:

以无向图为例,创建它只需要

G = nx.Graph()
print(G)
# Graph with 0 nodes and 0 edges

可以看出,使用这种方法创建的图是空图

2.2 添加结点

NetworkX 的结点可以是除了 None 以外的任何可哈希对象,例如字符串,数字,图像等(当然可以是另外一个 Graph 对象)。

若要每次只添加一个结点,则可以使用 add_node 方法:

G = nx.Graph()
G.add_node(1)
G.add_node('ABC')
G.add_node(nx.Graph())
print(G.number_of_nodes())  # 查看G中有多少个结点
# 3
print(G.nodes)
# [1, 'ABC', <networkx.classes.graph.Graph object at 0x1173ec880>]

若要一次添加多个结点,则可以使用 add_nodes_from 方法(传入参数必须是可迭代容器):

G = nx.Graph()
G.add_nodes_from([1, 'ABC', nx.Graph()])
print(G.nodes)
# [1, 'ABC', <networkx.classes.graph.Graph object at 0x1174f4f40>]
G = nx.Graph()
G.add_nodes_from("hello")
print(G.nodes)  # 因为结点不可重复,所以最终只有4个结点
# ['h', 'e', 'l', 'o']

2.3 添加边

同样,我们可以每次只添加一条边,这需要用到 add_edge 方法

G = nx.Graph()
G.add_edge(1, 2)  # 在结点1,2之间添加一条边
print(G.edges)
# [(1, 2)]
print(G.nodes)
# [1, 2]

可以看出,在两个结点之间添加边时,若这两个结点在图中不存在,则会自动创建。

若要一次性添加多个边,则需使用 add_edges_from 方法:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
print(G.nodes)
# [0, 1, 2, 3]
print(G.edges)
# [(0, 1), (1, 2), (2, 3)]

可视化:

nx.draw(G, with_labels=True)

2.4 删除结点

删除单个结点:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2)])
G.remove_node(1)
print(G.edges)
# []

删除多个结点:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.remove_nodes_from([1, 2])
print(G.edges)
# []
print(G.nodes)
# [0, 3]

2.5 删除边

删除单个边:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.remove_edge(1, 2)
print(G.edges)
# [(0, 1), (2, 3)]

删除多条边:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.remove_edges_from([(0, 1), (2, 3)])
print(G.edges)
# [(1, 2)]

注意,删除边并不会删除结点。

三、图的相关计算

图的邻接表:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
print(G.adj)
# {0: {1: {}}, 1: {0: {}, 2: {}}, 2: {1: {}, 3: {}}, 3: {2: {}}}

某个结点的所有邻居:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
nbr = G.neighbors(1)  # 返回一个迭代器
print([n for n in nbr])
# [0, 2]

注意,G.neighbors(n)G.adj[n]G[n] 均可以访问结点 nnn 的邻居。

判断结点和边是否存在:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
print(G.has_node(4))  # 等价于 4 in G
# False
print(G.has_edge(1, 2))
# True

求每个结点的度:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
print(G.degree)
# [(0, 1), (1, 2), (2, 2), (3, 1)]

计算有多少个结点和多少条边:

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
print(G.number_of_nodes())
# 4
print(G.number_of_edges())
# 3

NetworkX的基本用法相关推荐

  1. 复杂网络分析以及networkx学习

    原文地址:陈关荣老师整理的复杂网络的资源作者:zhengw789 http://www.ee.cityu.edu.hk/~gchen/ComplexNetworks.htm http://mrvar. ...

  2. Python 将关系对数据转换为图数据 / 邻接矩阵

    1. 前言 在深度学习任务,例如推荐系统中,将关系转换为图表示,即邻接矩阵是常用的操作. 通常的做法是先将关系对数据转换为图数据,然后生成该图的邻接矩阵,再存储为稀疏矩阵.但这种方法不适用于大型矩阵的 ...

  3. networkx的安装及简单用法

    对于学Python的小朋友都知道,Python中很多的库,因为这是一门解释性的语言,相对于其他语言来说,这门语言简单相对简单. 今天呢,我给大家分享一下networkx库的安装方法,我这里有两种简单的 ...

  4. networkx中求解平均度_networkX用法整

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

  5. networkx 点的属性_networkx 基础用法

    1.一些基础方法和属性 importnetworkx as nximportmatplotlib.pyplot as plt G= nx.Graph() #创建空的无向图#G = nx.DiGraph ...

  6. Conda官方下载安装步骤及conda用法详细介绍

    Conda简介(本文由www.169it.com搜集整理)Anaconda是一个Python下和Canopy类似的的科学计算环境,但用起来更加方便.自带的包管理器conda也很强大.Python科学计 ...

  7. python networkx库_python之networkx库小结

    备战数模,还是知道多点好.networkx这个库的话,画网络图贼好用. 一.安装 安装的话,跟其他包的安装差不多吧.我用的是anaconda就不用装了.其他的话,就用pip install netwo ...

  8. python中path的用法,python中path的用法

    如何将python的路径加到path中 方法一:函数添加 1 import sys 2 查看sys.path 3 添加sys.path.append("c:\\") 方法二:修改环 ...

  9. networkx笔记

    关于Python语言,如果没有接触过可以找一本Python的语法书来看看(推荐<Python 精要参考(第二版)>,网上有电子版).这个语言很简单易学,只要有点编程基础,几天就可以学会它, ...

最新文章

  1. css变成块级元素_探讨行内元素转换为块级元素_html/css_WEB-ITnose
  2. linux mysql内网_在Linux中mysql的一些基本操作
  3. 杭州中联高级技术培训中心CCNA实验手册
  4. 【万字长文详解】Python库collections,让你击败99%的Pythoner
  5. 利用Glibc库-ORIGIN-提权
  6. 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
  7. 关于 Docker ,你必须了解的核心都在这里
  8. JVM 排查问题实战
  9. untubu安装mysql_简单操作阿里云untubu服务器并且配置LAMP环境
  10. Rabbit MQ 安装
  11. Mac Os 安装配置Maven以及IntelliJ IDEA Maven使用
  12. uniapp实现上传图片
  13. MT6589下载工具,MT6589刷机工具
  14. css常用样式(文字样式、边框样式、背景样式)
  15. 使用Flutter实现仿微信录音的插件
  16. 目前企业如何看待培训机构出来的程序员?
  17. 苹果小程序闪退 camera组件
  18. Java中的图形界面编程-GUI
  19. Echarts-百家姓-饼状图
  20. 浅谈自动化控制系统的设计与实现

热门文章

  1. ASP.NET验证控件(ValidationSummary)
  2. windows上使用telnet测试端口号通不通
  3. Zygote启动流程解析
  4. py2exe使用教程
  5. 高精度电流源如何设计出来?
  6. C专家编程 第7章 对内存的思考 7.3 虚拟内存
  7. java recordset 记录数_【求助】asp中怎样获得一个记录集(Recordset)的所有行数?
  8. Flask 的替代品 aiohttp 和 Quart
  9. 这是英语绕口令,还是英语顺口溜?
  10. 多个application.yml