初识Python之Networkx模块

初识Python之Networkx模块

文章目录

    • 初识Python之Networkx模块
      • 简介
      • 安装Networkx
      • 导入模块、查看版本信息
      • 一些基本操作
        • 创建Graph
        • 添加边(节点)
        • 获取Graph的基本信息
        • Graph的基本绘图
      • 简单应用案例
        • 使用内置的Graph数据
        • 创建一个无向图
        • 创建一个有向图
        • 在计算机网络中的应用案例
        • 在数据中心里的应用案例

简介

本文主要介绍Networkx的使用方法和一些简单的应用案例,使用方法主要会介绍创建图、图的基本操作等;应用案例不仅会介绍如何生成无向图、有向图等,还会介绍Networkx在计算机网络、数据中心网络等网络中的简单应用案例。

安装Networkx

在cmd或者shell中输入命令:

pip install networkx

如果使用python中的.ipynb的话也可以:

%pip install networkx

导入模块、查看版本信息

import networkx as nx
import matplotlib.pyplot as plt
print(nx.__version__)

在这里插入图片描述

一些基本操作

创建Graph
G = nx.Graph()          # 无向图
G = nx.DiGraph()        # 有向图
G = nx.MultiGraph()     # 多重无向图
G = nx.MultiDigraph()   # 多重有向图
G.clear()               # 清空图
添加边(节点)

在添加边的时候,如果使用了未添加的节点,则会自动添加节点。另外单纯添加节点的方法是:

# 添加节点
G.add_node(1)
G.add_nodes_from([2, 3, 4])
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的基本绘图
# 最简单的绘制
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'
)

简单应用案例

使用内置的Graph数据
G = nx.karate_club_graph()
plt.figure(figsize =(10, 8))
nx.draw_networkx(G, with_labels = True)

在这里插入图片描述

创建一个无向图
# 创建一个无向图
G = nx.Graph()# 添加节点
G.add_node(1)
G.add_nodes_from([2, 3, 4])# 添加边
G.add_edge(1, 2)
G.add_edges_from([(1, 3), (2, 4), (3, 4)])# 绘制图形
nx.draw(G, with_labels=True, font_weight='bold')
plt.show()# 输出图的基本信息
print("图中的节点:", G.nodes())
print("图中的边:", G.edges())
print("节点 1 的邻居:", list(G.neighbors(1)))

在这里插入图片描述
在这里插入图片描述

创建一个有向图
# 创建一个有向图
DiG = nx.DiGraph()# 添加节点
DiG.add_node(1)
DiG.add_nodes_from([2, 3, 4])# 添加有向边
DiG.add_edge(1, 2)
DiG.add_edges_from([(1, 3), (2, 4), (3, 4)])# 绘制图形
nx.draw(DiG, with_labels=True, font_weight='bold', arrowsize=20, node_size=700)
plt.show()# 输出有向图的基本信息
print("有向图中的节点:", DiG.nodes())
print("有向图中的有向边:", DiG.edges())
print("节点 1 的出度:", DiG.out_degree(1))
print("节点 1 的入度:", DiG.in_degree(1))

在这里插入图片描述
在这里插入图片描述

在计算机网络中的应用案例
# 创建一个有向图表示网络拓扑
G = nx.DiGraph()# 添加节点和边
G.add_nodes_from(["Router1", "Router2", "Switch1", "Computer1"])
G.add_edges_from([("Router1", "Router2"), ("Router1", "Switch1"), ("Switch1", "Computer1")])# 绘制网络拓扑
nx.draw(G, with_labels=True, font_weight='bold', arrowsize=20, node_size=700)
plt.show()# 计算节点度
degrees = dict(G.degree())
print("节点度:", degrees)# 计算聚类系数
clustering_coefficient = nx.clustering(G)
print("聚类系数:", clustering_coefficient)# 计算最短路径
shortest_path = nx.shortest_path(G, source="Router1", target="Computer1")
print("最短路径:", shortest_path)# 绘制带权重的有向图
nx.draw(G, with_labels=True, font_weight='bold', arrowsize=20, node_size=700, connectionstyle='arc3,rad=0.1')
plt.show()# 查找所有最短路径
all_shortest_paths = list(nx.all_shortest_paths(G, source="Router1", target="Computer1"))
print("所有最短路径:", all_shortest_paths)# 计算路径长度
path_length = nx.shortest_path_length(G, source="Router1", target="Computer1")
print("最短路径长度:", path_length)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在数据中心里的应用案例
import networkx as nx
import matplotlib.pyplot as plt
import random# 创建一个有向图表示网络拓扑
network_topology = nx.DiGraph()# 添加节点和边
network_topology.add_nodes_from(["Router1", "Router2", "Switch1", "Link1"])
network_topology.add_edges_from([("Router1", "Switch1"), ("Router2", "Switch1"), ("Switch1", "Link1")])# 添加边属性表示流量和权重
network_topology["Switch1"]["Link1"]["traffic"] = 0
network_topology["Switch1"]["Link1"]["threshold"] = 50
network_topology["Switch1"]["Link1"]["weight"] = 1.0# 模拟拥塞控制算法
def congestion_control(network, threshold):for edge in network.edges(data=True):# 检查键是否存在,如果不存在则初始化if "traffic" not in edge[2]:edge[2]["traffic"] = 0edge[2]["traffic"] += random.randint(0, 20)  # 模拟随机流量增加if edge[2]["traffic"] > threshold:# 执行拥塞控制动作edge[2]["weight"] = 2.0  # 增加拥塞链路的权重else:edge[2]["weight"] = 1.0  # 恢复非拥塞链路的权重# 模拟多个时间步的拥塞控制
for i in range(5):congestion_control(network_topology, threshold=network_topology["Switch1"]["Link1"]["threshold"])print(f"时间步 {i + 1} - Link1 流量:{network_topology['Switch1']['Link1']['traffic']}")# 绘制带权重的有向图
edge_weights = [edge[2]["weight"] for edge in network_topology.edges(data=True)]
nx.draw(network_topology, with_labels=True, font_weight='bold', arrowsize=20, node_size=700, edge_color=edge_weights, cmap=plt.cm.Blues)
plt.show()

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/238239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【halcon深度学习之那些封装好的库函数】find_dl_samples

函数简介 find_dl_samples 是一个用于检索满足特定条件的深度学习数据集样本索引的过程。让我们逐步详细解释它的输入参数和功能: Samples: 这是包含样本字典或样本字典元组的输入参数。这些样本是将要被搜索的对象。 KeyName: 用于指定要查找的条目的键名。在样本…

关于“Python”的核心知识点整理大全35

目录 13.3.4 重构 create_fleet() game_functions.py 13.3.5 添加行 game_functions.py alien_invasion.py 13.4 让外星人群移动 13.4.1 向右移动外星人 settings.py alien.py alien_invasion.py game_functions.py 13.4.2 创建表示外星人移动方向的设置 13.4.3 检…

【第七在线】可持续时尚与商品计划:减少库存浪费的方法

随着可持续时尚的崭露头角,服装企业越来越重视减少库存浪费。库存浪费不仅对环境造成负面影响,还对企业的经济可持续性产生负面影响。本文将深入探讨可持续时尚与商品计划之间的关系,以及一些减少库存浪费的方法,有助于改进商品计…

源码订货系统的优势

源码订货系统是一种企业购买后可以获得源代码的订货系统,它可以不受软件厂商的规模、发展而修改和使用。与SaaS订货系统相比,核货宝为您分享源码订货系统的四大优势: 一是开放性:源码订货系统是开源的,用户可以掌握源代…

解决IDEA编译/启动报错:Abnormal build process termination

报错信息 报错信息如下: Abnormal build process termination: "D:\Software\Java\jdk\bin\java" -Xmx3048m -Djava.awt.headlesstrue -Djava.endorsed.dirs\"\" -Djdt.compiler.useSingleThreadtrue -Dpreload.project.path………………很纳…

MySQL概括与SQL分类

文章目录 一、计算机语言二、SQL语言三、数据库系统四、MySQL简介 一、计算机语言 二、SQL语言 三、数据库系统 四、MySQL简介

【MySQL】事务、事务隔离级别、死锁

文章目录 1. 事务1.1 事务的属性 ACID1.2 创建事务1.3 autocommit 2. 并发和锁定2.1 并发问题 3. 事务隔离级别3.1 读未提交3.2 读已提交3.3 可重复读:MySQL的默认事务隔离级别3.4 序列化 4. 死锁 1. 事务 事务:单个工作单元的一组SQL语句。事务中的所有…

Python的环境搭建环境配置()

Python 环境搭建 一,下载Python 1.去官网 www.python.org 下载环境 2.如图点击Download 3.选择Windows 4.如图直接下载 5.直接勾选 6.后面就一直默认选项 Win11 安装目录 不能放在C盘的ProgramFIle路径下 二,测试环境是否安装成功 1.winR 输入cmd 2.输入python --versio…

【JS】事件循环机制

一、JS单线程、异步、同步概念 众所周知,JS是单线程(如果一个线程删DOM,一个线程增DOM,浏览器傻逼了~所以只能单着了),虽然有webworker酱紫的多线程出现,但也是在主线程的控制下。we…

服务器数据恢复-服务器断电导致linux操作系统数据丢失的数据恢复案例

linux操作系统服务器数据恢复环境: 某品牌R730服务器MD3200系列存储,linux操作系统。 服务器故障: 机房意外断电导致服务器linux操作系统部分文件丢失。 服务器数据恢复过程: 1、将故障服务器连接到北亚企安数据恢复中心备份服务器…

【JVM】一、认识JVM

文章目录 1、虚拟机2、Java虚拟机3、JVM的整体结构4、Java代码的执行流程5、JVM的分类6、JVM的生命周期 1、虚拟机 虚拟机,Virtual Machine,一台虚拟的计算机,用来执行虚拟计算机指令。分为: 系统虚拟机:如VMware&am…

如何在Portainer部署一个web站点到Nginx容器并结合内网穿透远程访问

文章目录 前言1. 安装Portainer1.1 访问Portainer Web界面 2. 使用Portainer创建Nginx容器3. 将Web静态站点实现公网访问4. 配置Web站点公网访问地址4.1公网访问Web站点 5. 固定Web静态站点公网地址6. 固定公网地址访问Web静态站点 前言 Portainer是一个开源的Docker轻量级可视…

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读 AbstractIntroductionRelated WorkMethodExperimentsConclusions阅读总结 论文标题:Appearance-Motion Memory Consistency Network for Video Anomaly Detection 文章信息&am…

Node.js-模块化(二)

1. 模块化的基本概念 1.1 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元。 1.2 编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则&…

大一C语言作业题目2

目录 字符串? struct? index细节? scanf细节? 7-2 找出总分最高的学生 给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符…

数据结构和算法笔记2:二分法

二分法网上有两种写法&#xff0c;一种左闭右闭&#xff0c;一种左闭右开&#xff0c;个人习惯左闭右闭的写法&#xff0c; 有序数组查找数 这是标准二分法&#xff0c;对应力扣的704. 二分查找&#xff1a; 求值为target的索引 int search(vector<int>& nums, i…

说说 style gan 中的感知路径长度(Perceptual Path Length)

我在之前的博库中介绍了 style gan 的基本原理&#xff0c;原文中有提出感知路径长度&#xff08;Perceptual Path Length&#xff09;的概念。这是一种评价生成器质量的方式。 PPL基本思想&#xff1a;给出两个随机噪声 z 1 , z 2 ​ &#xff0c;为求得两点的感知路径长度PPL…

利用ffmpeg cv2取h265码流视频(转换图片灰屏问题解决)

利用海康威视相机拍出来的视频是H265格式的&#xff0c;相比于常规的H264编码&#xff0c;压缩率更高&#xff0c;但因此如果直接用正常取流方法读取&#xff0c;会出现无法读取的情况 1. 如图h265码流取出图片为灰屏 2 、解决灰屏问题 import subprocess import cv2# 将h265流…

Spring事务管理—讲解、案例、应用

简介&#xff1a;Spring事务管理和数据库的事务管理的功能作用上是一样的&#xff0c;在学习数据库时&#xff0c;为了数据完整性&#xff0c;采用了事务管理&#xff0c;即开启事务、提交事务和管理事务。在SpringBoot框架中添加一个注解 Transactional 就可以将当前方法、类和…

c语言错误总结

函数 A:void类型函数可以 B&#xff1a;不需要&#xff0c;如果return 不返回任何值&#xff0c;函数会在return语句执行后终止执行&#xff0c;后面的语句不会执行 C&#xff1a;对的 D&#xff1a;不可能&#xff0c;return只能返回一个数据 A:函数不一定有返回值 B:可以…