【python--networkx】函数说明+代码讲解

news2024/11/15 12:48:30

【Python–NetworkX】函数说明+代码讲解

文章目录

  • 【Python--NetworkX】函数说明+代码讲解
    • 1. 介绍
      • 1.1 前言
      • 1.2 图的类型(Graph Types)
      • 1.3 常用方法
    • 2. 代码示例

1. 介绍

1.1 前言

NetworkX是复杂网络研究领域中的常用Python包。

1.2 图的类型(Graph Types)

允许以可哈希的object作为节点,任何Python object作为边属性。

如何选择使用哪种图:
1
这里解释一下什么是平行边:连接一对顶点的两条边叫做平行边,即,无向图中,两个顶点间有多条边,他们叫做平行边,打个比方,北京和上海直接可以 是公路、铁路、飞机,那么他们互为平行边。

1.3 常用方法

  • 创建一个空的图
    1)无向图:G = nx.Graph()
    2)有向图:DG = nx.DiGraph()
  • 将有向图转换为无向图:G = nx.Graph(DG)
  • 图是否有向:G.is_directed() 返回布尔值
  • 添加节点
    1)直接添加一个节点(任何object都可以作为节点,包括另一个图)G.add_node(1)、G.add_node(DG)
    2)从任何容器加点:a list, dict, set or even the lines from a file or the nodes from another graph…;G.add_nodes_from() 或 nx.path_graph()
  • 添加边
    1)添加一条边 G.add_edge(u, v)
    2)添加一个边的列表 G.add_edges_from([(1, 2), (1, 3)])
    3)添加一个边的collection G.add_edges_from(H.edges)
    4)如果添加的边的点不存在于图中,会自动添上相应节点而不报错
  • 属性attribute
    1)图的节点/边/图都可以在关联的attribute字典中以键值对key/value形式存储attribute(key一定要是可哈希的)
    2)默认情况下属性字典是空的
    3)可以通过add_edge() add_node() 方法或直接操作分别名为graph edges nodes的属性字典来进行操作

2. 代码示例

import networkx as nx
import numpy as np 

#定义图的节点和边 
nodes=['0','1','2','3','4','5','a','b','c'] 
edges=[('0','0',1),('0','1',1),('0','5',1),('0','5',2),('1','2',3),('1','4',5),('2','1',7),('2','4',6),('a','b',0.5),('b','c',0.5),('c','a',0.5)] 

plt.subplots(1,2,figsize=(10,3)) 

#定义一个无向图和有向图 
G1 = nx.Graph() 
G1.add_nodes_from(nodes) 
G1.add_weighted_edges_from(edges) 
 
G2 = nx.DiGraph() 
G2.add_nodes_from(nodes) 
G2.add_weighted_edges_from(edges) 
 
pos1=nx.circular_layout(G1) 
pos2=nx.circular_layout(G2) 
 
#画出无向图和有向图 
plt.subplot(121) 
nx.draw(G1,pos1, with_labels=True, font_weight='bold') 
plt.title('无向图',fontproperties=myfont) 
plt.axis('on') 
plt.xticks([]) 
plt.yticks([]) 

plt.subplot(122) 
nx.draw(G2,pos2, with_labels=True, font_weight='bold') 
plt.title('有向图',fontproperties=myfont) 
plt.axis('on') 
plt.xticks([]) 
plt.yticks([]) 

plt.show() 

 #控制numpy输出小数位数 
np.set_printoptions(precision=3)  
 
#邻接矩阵 
A = nx.adjacency_matrix(G1) 
print('邻接矩阵:\n',A.todense()) 
邻接矩阵: 
 [[0.  0.  0.  0.  5.  0.  0.  0.  6. ] 
 [0.  0.  0.  2.  0.  0.  0.  0.  0. ] 
 [0.  0.  0.  0.  0.  0.5 0.5 0.  0. ] 
 [0.  2.  0.  1.  1.  0.  0.  0.  0. ] 
 [5.  0.  0.  1.  0.  0.  0.  0.  7. ] 
 [0.  0.  0.5 0.  0.  0.  0.5 0.  0. ] 
 [0.  0.  0.5 0.  0.  0.5 0.  0.  0. ] 
 [0.  0.  0.  0.  0.  0.  0.  0.  0. ] 
 [6.  0.  0.  0.  7.  0.  0.  0.  0. ]] 

#关联矩阵 
I = nx.incidence_matrix(G1) 
print('\n关联矩阵:\n',I.todense()) 
关联矩阵: 
 [[1. 1. 0. 0. 0. 0. 0. 0. 0.] 
  [0. 0. 1. 0. 0. 0. 0. 0. 0.] 
 [0. 0. 0. 1. 1. 0. 0. 0. 0.] 
  [0. 0. 1. 0. 0. 1. 0. 0. 0.] 
  [0. 1. 0. 0. 0. 1. 0. 1. 0.] 
 [0. 0. 0. 1. 0. 0. 0. 0. 1.] 
 [0. 0. 0. 0. 1. 0. 0. 0. 1.] 
 [0. 0. 0. 0. 0. 0. 0. 0. 0.] 
 [1. 0. 0. 0. 0. 0. 0. 1. 0.]] 

#拉普拉斯矩阵 
L=nx.laplacian_matrix(G1) 
print('\n拉普拉斯矩阵:\n',L.todense()) 
拉普拉斯矩阵: 
  [[11.   0.   0.   0.  -5.   0.   0.   0.  -6. ] 
 [ 0.   2.   0.  -2.   0.   0.   0.   0.   0. ] 
 [ 0.   0.   1.   0.   0.  -0.5 -0.5  0.   0. ] 
 [ 0.  -2.   0.   3.  -1.   0.   0.   0.   0. ] 
 [-5.   0.   0.  -1.  13.   0.   0.   0.  -7. ] 
 [ 0.   0.  -0.5  0.   0.   1.  -0.5  0.   0. ] 
 [ 0.   0.  -0.5  0.   0.  -0.5  1.   0.   0. ] 
 [ 0.   0.   0.   0.   0.   0.   0.   0.   0. ] 
  [-6.   0.   0.   0.  -7.   0.   0.   0.  13. ]] 

#标准化的拉普拉斯矩阵 
NL=nx.normalized_laplacian_matrix(G1) 
print('标准化的拉普拉斯矩阵:\n',NL.todense()) 
标准化的拉普拉斯矩阵: 
  [[ 1.     0.     0.     0.    -0.418  0.     0.     0.    -0.502] 
  [ 0.     1.     0.    -0.707  0.     0.     0.     0.     0.   ] 
  [ 0.     0.     1.     0.     0.    -0.5   -0.5    0.     0.   ] 
  [ 0.    -0.707  0.     0.75  -0.139  0.     0.     0.     0.   ] 
  [-0.418  0.     0.    -0.139  1.     0.     0.     0.    -0.538] 
  [ 0.     0.    -0.5    0.     0.     1.    -0.5    0.     0.   ] 
  [ 0.     0.    -0.5    0.     0.    -0.5    1.     0.     0.   ] 
  [ 0.     0.     0.     0.     0.     0.     0.     0.     0.   ] 
  [-0.502  0.     0.     0.    -0.538  0.     0.     0.     1.   ]] 

#有向图拉普拉斯矩阵 
DL=nx.directed_laplacian_matrix(G2) 
print('\n有向拉普拉斯矩阵:\n',DL) 
有向拉普拉斯矩阵: 
  [[ 0.889 -0.117 -0.029 -0.087 -0.319 -0.029 -0.029 -0.129 -0.242] 
  [-0.117  0.889 -0.026 -0.278 -0.051 -0.026 -0.026 -0.114 -0.056] 
  [-0.029 -0.026  0.994 -0.012 -0.009 -0.481 -0.481 -0.025 -0.01 ] 
  [-0.087 -0.278 -0.012  0.757 -0.097 -0.012 -0.012 -0.052 -0.006] 
  [-0.319 -0.051 -0.009 -0.097  0.994 -0.009 -0.009 -0.041 -0.434] 
  [-0.029 -0.026 -0.481 -0.012 -0.009  0.994 -0.481 -0.025 -0.01 ] 
  [-0.029 -0.026 -0.481 -0.012 -0.009 -0.481  0.994 -0.025 -0.01 ] 
  [-0.129 -0.114 -0.025 -0.052 -0.041 -0.025 -0.025  0.889 -0.045] 
  [-0.242 -0.056 -0.01  -0.006 -0.434 -0.01  -0.01  -0.045  0.994]] 

#拉普拉斯算子的特征值 
LS=nx.laplacian_spectrum(G1) 
print('\n拉普拉斯算子的特征值:\n',LS) 
拉普拉斯算子的特征值: 
 [-1.436e-15  0.000e+00  4.610e-16  7.000e-01  1.500e+00  1.500e+00 
  4.576e+00  1.660e+01  2.013e+01] 

#邻接矩阵的特征值 
AS=nx.adjacency_spectrum(G1) 
print('邻接矩阵的特征值:\n',AS) 
邻接矩阵的特征值: 
  [12.068+0.000e+00j  2.588+0.000e+00j -7.219+0.000e+00j -4.925+0.000e+00j 
 -1.513+0.000e+00j  1.   +0.000e+00j -0.5  +2.393e-17j -0.5  -2.393e-17j0.  +0.000e+00j]

#无向图的代数连通性 
AC=nx.algebraic_connectivity(G1) 
print('无向图的代数连通性:\n',AC) 
无向图的代数连通性: 
  0.0 
  
#图的光谱排序 
SO=nx.spectral_ordering(G1) 
print('图的光谱排序:\n',SO) 
图的光谱排序: 
 ['4', '2', '1', '0', '5', 'b', 'c', 'a', '3'] 

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

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

相关文章

Linux高级命令之文件权限命令

文件权限命令学习目标能够使用chmod命令完成文件权限的修改1. chmod命令的介绍命令说明chmod修改文件权限chmod修改文件权限有两种方式:字母法数字法2. chmod 字母法的使用角色说明:角色说明uuser, 表示该文件的所有者ggroup, 表示用户组oother, 表示其他用户aall, 表示所有用户…

[carla]关于odometry坐标中的角度坐标系 以及 到地图的映射问题

1.获取车辆的Odometry原始信息 在carla中,通过订阅/carla/ego_vecle/odometry 可以查看车辆的全局位置信息,例如: > header: seq: 118872stamp: secs: 5946nsecs: 5720187frame_id: "map" child_frame_id: "ego_vehicle" pos…

替换子串得到平衡字符串[map计数+滑动窗口]

滑动窗口前言一、替换子串得到平衡字符串二、map计数滑动窗口总结参考文献前言 对于子串问题,确定左边界和有边界,就能确定一个子串,暴力取子串,时间复杂度O(n2)。有时挖掘内在规律的限定,或者问题所限定,…

Vue笔记(1)——数据代理与绑定

一、初始Vue 1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象; 2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法; 3.root容器里的代码被称为【Vue模板】; 4.Vue实例和容器是…

教育行业需要什么样的客服系统?

某教育公司拥有素质教育、成人教育、智慧教育等多个业务板块,日常通过电商、线上媒体、线上线下授课等方式进行业务开展和品牌宣传,取得了非常不错的成绩,受到了很多人的好评反馈。 对于这样一个教育公司,客户来源广泛&#xff0…

SpringBoot 使用 Spark

文章目录读取 txt 文件读取 csv 文件读取 MySQL 数据库表读取 Json 文件中文输出乱码前提: 可以参考文章 SpringBoot 接入 Spark SpringBoot 已经接入 Spark已配置 JavaSparkContext已配置 SparkSession Resource private SparkSession sparkSession;Resource pr…

机器学习算法:随机森林

在经典机器学习中,随机森林一直是一种灵丹妙药类型的模型。 该模型很棒有几个原因: 与许多其他算法相比,需要较少的数据预处理,因此易于设置充当分类或回归模型不太容易过度拟合可以轻松计算特征重要性在本文[1]中,我想…

【docker知识】从容器中如何访问到宿主机

一、说明 使用 Docker 能实现服务的容器化,并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。 二、方法1:简单的选择 适用于 Windows 和 Ma…

2023/2/13总结

今天主要学习了哈夫曼树。 哈夫曼树 哈夫曼树是二叉树的一种,它是一种WPL最优二叉树。 叶子结点(也称叶节点):指的是自己下面不再连接有节点的节点(即末端),称为叶子节点(又称为终…

PDF内容提取器:ByteScout PDF Extractor SDK Crack

ByteScout PDF Extractor SDK – 用于 PDF 到 JSON、PDF 到 Excel、CSV、XML、从 .NET 和 ASP.NET 从 PDF 中提取文本的 PDF 提取器库 ByteScout PDF Extractor SDK – 用于 PDF 到 JSON、PDF 到 Excel、CSV、XML、从 .NET 和 ASP.NET 从 PDF 中提取文本的 PDF 提取器库​ ​ ​…

test4

网络层故障分析 一、 路由器故障 a.主要用途简述 b.故障 & 故障原因 & 解决方案 1)路由器的部分功能无法实现 故障故障原因解决方案路由器配置完全正确,但是有些功能却不能实现。路由器的软件系统出现问题升级软件系统 2)网络频繁…

ABC 289 G - Shopping in AtCoder store 数学推导+凸包

大意&#xff1a; n个顾客&#xff0c;每个人有一个购买的欲望bi,m件物品&#xff0c;每一件物品有一个价值ci,每一个顾客会买商品当且仅当bici>定价. 现在要求对每一个商品定价&#xff0c;求出它的最大销售值&#xff08;数量*定价&#xff09; n,m<2e5 思路&#x…

工程监测多通道振弦模拟信号采集仪VTN常规操作

工程监测多通道振弦模拟信号采集仪VTN常规操作 一、开关机 1、开机 VTN4XX 有四个开机途径&#xff0c;手动开机、自动定时开机和上电开机、信号触发开机。 上电开机&#xff1a;当“工作模式拨码开关” 第 4 位为 ON 时&#xff0c;直接连接外部电源即可开机。 自动开机&…

JAVA文件上传多方式

1.文件上传接收文件接口 通过post接口&#xff0c;上传文件 PostMapping(value "/uploadFile")ApiOperation(value "文件上传", notes "文件上传")public Result uploadFile(RequestParam (name "file") MultipartFile file) thr…

【知识图谱论文】Bi-Link:通过转换器和提示的对比学习桥接来自文本的归纳链接预测

文献题目&#xff1a;Bi-Link: Bridging Inductive Link Predictions from Text via Contrastive Learning of Transformers and Prompts发表期刊&#xff1a;WWW2023代码&#xff1a; https://anonymous.4open.science/r/Bi-Link-2277/. 摘要 归纳知识图的完成需要模型来理解…

如何通过 9 个简单步骤创建网站

您可以在 20 分钟内创建一个网站。您也不需要成为技术向导。不管是商务还是休闲。您不需要花哨的设计师或昂贵的开发人员。只需按照以下简单步骤操作&#xff0c;您就可以立即上线。 顶级虚拟主机提供商创建网站如果你想创建一个网站&#xff0c;你需要一个网络托管服务提供商。…

图机器学习

图机器学习1、图机器学习导论1.1图神经网络与普通神经网络的异同2、图的基本表示和特征工程2.1 图的基本表示2.1.1 图的本体设计2.1.2 图的种类2.1.3节点连接数&#xff08;度&#xff09;2.1.4图的基本表示&#xff08;邻接矩阵&#xff09;节点数量少使用2.1.5图的基本表示&a…

【GD32F427开发板试用】5. SPI驱动TFTLCD屏幕

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…

IB学习者的培养目标有哪些?

IB课程强调要培养年轻人的探究精神&#xff0c;在富有渊博知识的同时&#xff0c;更要勤于思考&#xff0c;敢于思考&#xff0c;尊重和理解跨文化的差异&#xff0c;坚持原则维护公平&#xff0c;让这个世界充满爱与和平&#xff0c;让这个世界变得更加美好。上一次我们为大家…

编译原理—翻译方案、属性栈代码

系列文章戳这里&#x1f447; 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习…