python复杂网络分析库NetworkX

news2025/4/8 15:37:20

文章目录

    • 1.Networkx简介
    • 2.图的类型(Graphs)
    • 3.图的创建(Graph Creation)
    • 4.图的属性(Graph Reporting)
    • 5.图算法(Algorithms)
    • 6.图的绘制(Drawing)
    • 7.数据结构
    • 8.图着色问题案例

1.Networkx简介

NetworkX 是一个Python包,用于创建、操作和研究复杂网络的结构和功能。提供以下内容:

  • 图、有向图和多重图的数据结构
  • 许多标准图算法(最短路,最大流等)
  • 网络结构及分析方法
  • 经典图、随机图和合成网络的生成器

2.图的类型(Graphs)

NetworkX根据图有无方向和是否多边分别以下4种类
在这里插入图片描述
首先根据问题创建你需要的图的实例

import networkx as nx

G = nx.Graph()
G = nx.DiGraph()
G = nx.MultiGraph()
G = nx.MultiDiGraph()

3.图的创建(Graph Creation)

可以用以下三种方法创建NetworkX图对象

  • 图生成器(Graph generators):创建网络拓扑结构的标准算法
  • 从已经存在的源文件中导入数据
  • 直接添加边和点

直接添加边和顶点是容易描述的

G = nx.Graph()
G.add_edge(1, 2)  # 边(1,2)
G.add_edge(2, 3, weight=0.9)  # 加权边(2,3),权值0.9

边的属性可多样

import math
G.add_edge('y', 'x', function=math.cos)
G.add_node(math.cos)  # 任何可哈希的都可以成为顶点

可以一次添加多条边

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)

NetworkX添加和移走点和边的方法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.图的属性(Graph Reporting)

对于一个图,通常需要查看的视图信息包括:顶点,边,邻接点,度。这些视图提供对属性的迭代,数据属性查找等。视图引用图形数据结构,因此任何更改都会显示在视图里。常用属性有:

G.edges代表所有边

for e in list(G.edges):
    print(e)
    
(1, 2)
(1, 4)
(2, 3)
(2, 4)
('y', 'x')
('a', 'b')
('a', 'c')
('b', 'c')
('c', 'd')

G.edges.items()G.edges.values()和python中的字典功能相似,

for e, datadict in G.edges.items():
    print(e, datadict)
    
(1, 2) {}
(1, 4) {}
(2, 3) {'weight': 0.9}
(2, 4) {}
('y', 'x') {'function': <built-in function cos>}
('a', 'b') {'weight': 5.0}
('a', 'c') {'weight': 1.0}
('b', 'c') {'weight': 3.0}
('c', 'd') {'weight': 7.3}

G.edges.data()会提供具体的属性,包括颜色,权值等

G.edges.data()
Out[23]: EdgeDataView([(1, 2, {}), (1, 4, {}), (2, 3, {'weight': 0.9}), (2, 4, {}), ('y', 'x', {'function': <built-in function cos>}), ('a', 'b', {'weight': 5.0}), ('a', 'c', {'weight': 1.0}), ('b', 'c', {'weight': 3.0}), ('c', 'd', {'weight': 7.3})])

如果想要查找某个点的邻接点(边),可以使用G[u]

G['a']
Out[24]: AtlasView({'b': {'weight': 5.0}, 'c': {'weight': 1.0}})

给出以点1作为顶点的三角形数使用nx.triangles()

nx.triangles(G, 1)
Out[25]: 1

还有许多关于点,边,度的属性使用方法可见networkx_reference

5.图算法(Algorithms)

NetworkX提供了很多图算法,如最短路,广度优先搜索,聚类,同构算法等。例如使用Dijkstra找到最短路

G = nx.Graph()
e = [('a', 'b', 0.3), ('b', 'c', 0.9), ('a', 'c', 0.5), ('c', 'd', 1.2)]
G.add_weighted_edges_from(e)
nx.dijkstra_path(G, 'a', 'd')
Out[30]: ['a', 'c', 'd']

6.图的绘制(Drawing)

NetworkX本身没有绘图工具,但是提供了接口,可以使用其它绘图包Matplotlib等。

import matplotlib.pyplot as plt
G = nx.cubical_graph()  # 3-正则图
subax1 = plt.subplot(121)
nx.draw(G)

subax2 = plt.subplot(122)
# circular_layout:Position nodes on a circle.
nx.draw(G, pos=nx.circular_layout(G), node_color='r', edge_color='b')

在这里插入图片描述

7.数据结构

NetworkX使用dictionary of dictionaries of dictionaries作为基础的网络数据结构,这适合存储大规模稀疏网络并且能快速查找。键都是顶底,所有G[u]能返回点u的邻接点和边的属性。查看所有的邻接数据结构可以用G.adj,比如for node, nbrsdict in G.adj.items():n G[u][v]会返回该边的属性,dict-of-dicts-of-dicts的数据结构有以下优势:

  • 使用两次字典查找可以找到和移除边
  • 优于列表:稀疏存储更能快速查找
  • 优于集合:数据可以和边连接
  • G[u][v]返回边的属性字典
  • n in G可以测试点n是否在图G中
  • for nbr in G[n]迭代所有的邻边

下面是一个两条边的无向图例子,G.adj显示邻接关系

G = nx.Graph()
G.add_edge('A', 'B')
G.add_edge('B', 'C')
G.adj
Out[43]: AdjacencyView({'A': {'B': {}}, 'B': {'A': {}, 'C': {}}, 'C': {'B': {}}})

对于DiGraph图,使用两个dict-of-dicts-of-dicts的结构,一个表示后继G.succ,一个表示前者G.pred。对于 MultiGraph/MultiDiGraph使用dict-of-dicts-of-dicts-of-dicts的结构。
获取边的数据属性有两种接口:adjacency and edges。G[u][v]['width']等效于G.edges[u, v]['width']

G = nx.Graph()
G.add_edge(1, 2, color='red', weight=0.84, size=300)
G[1][2]['size']
Out[46]: 300
G.edges[1, 2]['color']
Out[47]: 'red'

8.图着色问题案例

提供了两种着色方法:
在这里插入图片描述

  • greedy_color(G, strategy='largest_first', interchange=False):用尽可能少的颜色给图涂色,且相邻点不同色,策略决定了顶点着色的顺序
  • equitable_color(G, num_colors):用r种颜色给图着色,相邻不同色,每个颜色的顶点数相差最多1

greedy_color()的策略有以下几种:

  • strategy_connected_sequential_dfs:深度优先遍历
  • strategy_connected_sequential_bfs:广度优先遍历
  • strategy_independent_set:找到最大独立集分配颜色后移走
  • strategy_largest_first:优先选择度最高的点
  • strategy_saturation_largest_first:饱和度算法,顶点的饱和度定义为当前分配给相邻顶点的不同颜色的数量
  • strategy_smallest_last:优先选择度最小的点

在这里插入图片描述

G = nx.cycle_graph(4)
nx.coloring.greedy_color(G, strategy="largest_first")
Out[49]: {0: 0, 1: 1, 2: 0, 3: 1}

nx.coloring.equitable_color(G, num_colors=3)
Out[54]: {0: 2, 1: 1, 2: 2, 3: 0}

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

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

相关文章

A股api交易接口文档怎么使用?

A股api交易接口是在股票量化交易中常用到的一种量化工具&#xff0c;对于它的用法&#xff0c;小编针对性的以文档的例子说明&#xff1a; 交易接口API 功能概述&#xff1a; 名称 功能 基本函数 Init API 初始化 Deinit API 反初始化 Logon 登录交易账户 Logoff 登…

年底了,接个大活儿,做一个回顾公司五年发展的总结ppt,要求做成H5网页

公司想做个五年总结 这不快年底了么&#xff0c;公司高层打算把这五年的发展历程做一次回顾巡礼&#xff0c;一方面宣扬一下公司文化&#xff0c;另一方面歌颂一下公司这五年来取得的辉煌成就&#xff0c;单纯的做个海报&#xff0c;写个公众号文章&#xff0c;或整个传统ppt在…

最强大脑记忆曲线(11)—— 30天结束第一轮复习后的操作

对于30天以后&#xff0c;结束第一轮&#xff08;6次&#xff09;复习以后&#xff0c;我们要做点什么操作呢&#xff1f; 对第一轮复习效果的评判可以是客观的&#xff0c;也可以是主观的。所谓客观的&#xff0c;是按“复习的正确率”来评判&#xff0c;大于某个值&#xff0…

内部类_Java

作者&#xff1a;爱塔居的博客_CSDN博客-JavaSE领域博主 专栏&#xff1a;JavaSE 文章目录 目录 文章目录 一、内部类的概念 二、内部类的分类 1.静态内部类&#xff08;被static修饰&#xff09; 2.非静态内部类 3.局部内部类 4.匿名内部类 一、内部类的概念 当一个事物…

【JVM】jvm的双亲委派机制

双亲委派机制一、JVM体系结构二、双亲委派机制的含义三、双亲委派机制的源代码四、双亲委派机制的意义五、示例代码一、JVM体系结构 我们先在这里放一张 JVM 的体系架构图&#xff0c;方便我们有个总体认知。 在了解JVM的双亲委派机制之前&#xff0c;你不得不需要知道的几个…

【Mapbox GL JS 入门】Hello world

目录Mapbox GL JS 简介安装Access tokenHello worldMapbox GL JS 简介 官网&#xff1a;https://www.mapbox.com/ git&#xff1a;https://github.com/mapbox/mapbox-gl-js/ 是一个客户端JavaScript库&#xff0c;为了web开发人员可以在web浏览器中动态绘制地图&#xff0c;在…

pico3pro使用unity播放360全景视频及事件交互

1.准备好全景视频&#xff0c;看起来是这样子的。 2.新建一个Materal 注意选择Shader如上图&#xff0c;Render Queue选择AlphaTest&#xff0c;因为我们要在视频前面放置按钮&#xff0c;UI的渲染值为3000&#xff0c;所以可以避免UI不显示的问题&#xff0c;这样UI会一直显示…

代码随想录算法训练营第四十一天| LeetCode343. 整数拆分、LeetCode96. 不同的二叉搜索树

一、LeetCode343. 整数拆分 1&#xff1a;题目描述&#xff08;343. 整数拆分&#xff09; 给定一个正整数 n &#xff0c;将其拆分为 k 个 正整数 的和&#xff08; k > 2 &#xff09;&#xff0c;并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 2&#xff1a;…

【Linux系统】网络配置保姆级教学

目录 文章目录网络配置yum install tree 安装和tree显示Linux网络配置[原理图](https://so.csdn.net/so/search?q原理图&spm1001.2101.3001.7020)查看ip和网关ipconfig查看windows网络配置ifconfig查看Linux网络配置ping测试主机之间网络连通性Linux网络环境配置**第一种方…

在 Azure AKS 上部署 EMQX MQTT 服务器集群

云进入以「应用为中心」的云原生阶段&#xff0c;Operator 模式的出现&#xff0c;为 Kubernetes 中的自动化任务创建配置与管理提供了一套行之有效的标准规范。针对大规模分布式物联网 MQTT 消息服务器 EMQX 全生命期管理的自动化管理工具 EMQX Kubernetes Operator&#xff0…

Android最全的setContentView源码分析

前言 我们在开发过程中&#xff0c;在布局文件里添加TextView,代码运行起来就可以看到对应文字显示出来&#xff0c;那系统是如何把我们的TextView加载并显示出来的呢&#xff1f; 源码分析&#xff08;这里版本对应30&#xff09; 第一阶段 我们直接从Activity.setContent…

《第一行代码》核心知识点:Activity(活动)

Android四大组件之一&#xff1a;Activity前言二、Android四大组件之一&#xff1a;Activity(活动)2.1 活动基本介绍2.2 活动的基本用法2.2.1 如何在应用中弹出提示信息2.2.2 如何在活动中添加Menu菜单&#xff08;就一般右上角的三点&#xff09;2.2.3 如何实现活动跳转2.2.5 …

CANoe-什么是Vector Tool Platform(全网唯一讲明白的文章)

在CANoe软件:Home -> Measurement下,有一个功能项,Vector Tool Platform,是做什么用的呢? 点击后打开这个功能页面,发现界面内容不多,包含:设备选择、组件更新、系统更新、远程连接,还有一个连接状态显示 从界面功能猜测:这是一个设备管理和连接的平台。那么是什么…

购买窗帘时哪些可以不做?-江南爱窗帘十大品牌

在家居软装上&#xff0c;窗帘的选择很重要&#xff0c;因为它的存在感很强&#xff0c;占据了墙面的半壁江山。选对了&#xff0c;满心欢喜&#xff0c;选错了&#xff0c;就只能悔恨痛苦了。 1.不做拼色、花纹&#xff1a;拼色窗帘在酒店十分常见&#xff0c;但是不建议照搬回…

14 C++11线程同步之条件变量

在学习条件变量之前需要先了解下std::unique_lock;条件变量 condition_variable需要配合std::unique_lock使用&#xff1b; std::unique_lock std::unique_lock的详细细节参考此篇文章。 C11条件变量 条件变量是 C11 提供的另外一种用于等待的同步机制&#xff0c;它能阻塞…

第04章_运算符

第04章_运算符 1. 算术运算符 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xff08;/&#xff09;和取模&…

使用dbeaver连接GaussDB数据库(集中式)

服务端方式登录 默认初始用户登录方式&#xff1a; [ommgaussdb01 ~]$ gsql -d postgres -p 30100 gsql ((GaussDB Kernel V500R002C10 build 04860477) compiled at 2022-10-28 20:04:35 commit 3892 last mr 8894 release) Non-SSL connection (SSL connection is recommen…

XAML标记扩展(3)

一、RelativeSource属性 我们进行Bingding时&#xff0c;如果明确知道数据源的Name&#xff0c;就能用Source或者ElementName进行绑定&#xff0c;但是有时候我们需要绑定的数据源可能没有明确的Name&#xff0c;此时我们就需要利 用Bingding的RelativeSource进行绑定&#xf…

虚拟数字人/直播/捏脸/3D/metahuman 实时人脸动作捕捉 开发笔记

拍照生成数字人 流程 手机&#xff08;iphone xr以上&#xff09;拍照&#xff08;脸部&#xff09;&#xff0c;导入到unrealmetahuman做数字人 【中文】从0开始捏一个自己的虚拟人&#xff0c;手机扫描到MetaHuman做一个自己的虚拟人_哔哩哔哩_bilibili 涉及APP iphone …

[附源码]java毕业设计校园兼职招聘系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…