NetworkX的基本用法
目录
- 一、前言
- 二、图、结点与边的创建/删除
- 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的基本用法相关推荐
- 复杂网络分析以及networkx学习
原文地址:陈关荣老师整理的复杂网络的资源作者:zhengw789 http://www.ee.cityu.edu.hk/~gchen/ComplexNetworks.htm http://mrvar. ...
- Python 将关系对数据转换为图数据 / 邻接矩阵
1. 前言 在深度学习任务,例如推荐系统中,将关系转换为图表示,即邻接矩阵是常用的操作. 通常的做法是先将关系对数据转换为图数据,然后生成该图的邻接矩阵,再存储为稀疏矩阵.但这种方法不适用于大型矩阵的 ...
- networkx的安装及简单用法
对于学Python的小朋友都知道,Python中很多的库,因为这是一门解释性的语言,相对于其他语言来说,这门语言简单相对简单. 今天呢,我给大家分享一下networkx库的安装方法,我这里有两种简单的 ...
- networkx中求解平均度_networkX用法整
1.安装 安装networkx之前要安装画图工具matplotlib,以及矩阵运算工具numpy,于是我们执行: pip install numpy pip install matplotlib pi ...
- networkx 点的属性_networkx 基础用法
1.一些基础方法和属性 importnetworkx as nximportmatplotlib.pyplot as plt G= nx.Graph() #创建空的无向图#G = nx.DiGraph ...
- Conda官方下载安装步骤及conda用法详细介绍
Conda简介(本文由www.169it.com搜集整理)Anaconda是一个Python下和Canopy类似的的科学计算环境,但用起来更加方便.自带的包管理器conda也很强大.Python科学计 ...
- python networkx库_python之networkx库小结
备战数模,还是知道多点好.networkx这个库的话,画网络图贼好用. 一.安装 安装的话,跟其他包的安装差不多吧.我用的是anaconda就不用装了.其他的话,就用pip install netwo ...
- python中path的用法,python中path的用法
如何将python的路径加到path中 方法一:函数添加 1 import sys 2 查看sys.path 3 添加sys.path.append("c:\\") 方法二:修改环 ...
- networkx笔记
关于Python语言,如果没有接触过可以找一本Python的语法书来看看(推荐<Python 精要参考(第二版)>,网上有电子版).这个语言很简单易学,只要有点编程基础,几天就可以学会它, ...
最新文章
- css变成块级元素_探讨行内元素转换为块级元素_html/css_WEB-ITnose
- linux mysql内网_在Linux中mysql的一些基本操作
- 杭州中联高级技术培训中心CCNA实验手册
- 【万字长文详解】Python库collections,让你击败99%的Pythoner
- 利用Glibc库-ORIGIN-提权
- 基于块的linux驱动程序,基于块的Linux驱动程序 块设备驱动 centos内核编译过程 操作系统课程设计...
- 关于 Docker ,你必须了解的核心都在这里
- JVM 排查问题实战
- untubu安装mysql_简单操作阿里云untubu服务器并且配置LAMP环境
- Rabbit MQ 安装
- Mac Os 安装配置Maven以及IntelliJ IDEA Maven使用
- uniapp实现上传图片
- MT6589下载工具,MT6589刷机工具
- css常用样式(文字样式、边框样式、背景样式)
- 使用Flutter实现仿微信录音的插件
- 目前企业如何看待培训机构出来的程序员?
- 苹果小程序闪退 camera组件
- Java中的图形界面编程-GUI
- Echarts-百家姓-饼状图
- 浅谈自动化控制系统的设计与实现