初识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,一经查实,立即删除!

相关文章

leetCode算法—14. 最长公共前缀

14.编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 难度:简单 * 示例 1: 输入:strs [“flower”,“flow”,“flight”] 输出:“fl” 示例 2: 输入&#xff1a…

LeetCode239. Sliding Window Maximum

文章目录 一、题目二、题解 一、题目 You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window m…

【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………………很纳…

【Python百宝箱】时序之美:Python 时间序列探秘与创新

时光漫游:Python 时间序列分析全指南 前言 在数字化时代,时间序列数据扮演着关键的角色,从金融到气象再到生产制造。本文将引导你穿越Python丰富的时间序列分析工具,探索从基础统计到机器学习和深度学习的各个层面。无论你是初学…

MySQL概括与SQL分类

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

ZZ014城市轨道交通运营与维护赛题第5套

ZZ014城市轨道交通运营与维护赛题第5套 模块1赛题 模块序号 模块1 对应赛项编号 ZZ014 模块名称 城市轨道交通运营服务 子任务数量 12 竞赛时间 60分钟 任务描述 行车组织作业、票务设备故障处置以及突发事件应急处理 职业要素 R基本专业素养 R专业实践技能 R协…

【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…

React AntDesign form表单文件上传 nodejs formidable 接受参数并把文件放置后端项目相对目录指定文件夹下面

@umijs/max 请求方法 // 上传文件改成form表单 export async function uploadFile(data, options) {return request(CMMS_UI_HOST + /api/v1/uploadFile, {method: POST,data,requestType: form,...(options || {}),}); }前端调用方法 注意upload组件上传 onChange的如下方法,…

strlen

strlen()从字符串的开头位置依次往后面计数,直到遇到‘\0’停止,所计算的字符串大小为‘\0’以前的字符所计算的值,最终的字符串长度不包括‘\0’ 它的原型是size_t strlen(const char* str) 例如一个数组 char arr…

【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 编程领域中的模块化 编程领域中的模块化,就是遵守固定的规则&…