当前位置: 首页 > news >正文

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

【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'] 

相关文章:

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

【Python–NetworkX】函数说明代码讲解 文章目录【Python--NetworkX】函数说明代码讲解1. 介绍1.1 前言1.2 图的类型(Graph Types)1.3 常用方法2. 代码示例1. 介绍 1.1 前言 NetworkX是复杂网络研究领域中的常用Python包。 1.2 图的类型(G…...

【Jqgrid分页勾选保存】三步实现表格分页勾选(取消勾选)保存(附源码)

目录1、创建临时存储数组,初始化赋值2、单行选中与取消,调整数组3、全选与取消全选,调整数组4、输出数组保存5、片尾彩蛋【写在前面】表格可以说是在我们的web页面中是最常见的,之前我们介绍过layui表格翻页勾选的实现过程&#x…...

Appium移动自动化测试——app控件获取之uiautomatorviewer

下载手机YY http://yydl.duowan.com/mobile/yymobile_client-android/5.4.2/yymobile_client-5.4.2-881.apk 若链接失效,请自行百度 新建maven空白工程 前置条件:安装eclipse,及其maven插件,请自行百度 新建的工程如下&#xf…...

webpack、vite、vue-cli、create-vue 的区别

webpack、vite、vue-cli、create-vue 的区别 首先说结论 Rollup更适合打包库,webpack更适合打包项目应用,vite基于rollup实现了热更新也适合打包项目。 功能工具工具脚手架vue-clicreate-vue构建项目vite打包代码webpackrollup 脚手架:用于初始化&#…...

数据结构——TreeMap、TreeSet与HashMap、HashSet

目录 一、Map 1、定义 2、常用方法 3、注意 二、TreeMap 三、HashMap 1、定义 2、冲突定义 3、冲突避免方法——哈希函数设计 (1)、直接定制法(常用) (2)、除留余数法(常用) (3)、平方取中法 &…...

Spring Boot学习篇(十三)

Spring Boot学习篇(十三) shiro安全框架使用篇(五) 1 准备工作 1.1 在SysUserMapper.xml中书写自定义标签 <select id"findRoles" resultType"string">select name from sys_role where id (select roleid from sys_user_role where userid (S…...

微软Bing的AI人工只能对话体验名额申请教程

微软Bing 免费体验名额申请教程流程ChatGPT这东西可太过火了。国外国内&#xff0c;圈里圈外都是人声鼎沸。微软&#xff0c;谷歌&#xff0c;百度这些大佬纷纷出手。连看个同花顺都有GPT概念了&#xff0c;搞技术&#xff0c;做生意的看来都盯上了 流程 下面就讲一下如何申…...

怎么打造WhatsApp Team?SaleSmartly(ss客服)告诉你

关键词&#xff1a;WhatsApp Team SaleSmartly&#xff08;ss客服&#xff09; 您是否正在寻找一种让您的团队能够在 WhatsApp协作消息传递的解决方案?拥有了 WhatsApp Team&#xff0c;不仅效率提升&#xff0c;还可以在智能聊天工具中比如SaleSmartly&#xff08;ss客服&…...

IPV4地址的原理和配置

第三章&#xff1a;IP地址的配置 IPv4&#xff08;Internet Protocol Version 4&#xff09;协议族是TCP/IP协议族中最为核心的协议族。它工作在TCP/IP协议栈的网络层&#xff0c;该层与OSI参考模型的网络层相对应。网络层提供了无连接数据传输服务&#xff0c;即网络在发送分…...

软件测试面试准备——(一)Selenium(1)基础问题及自动化测试

滴滴面试&#xff1a;1. 自己负责哪部分功能&#xff1f;农餐对接系统分为了两大子系统&#xff0c;一个是个人订餐系统&#xff0c;二是餐馆、个人与农产品供应商进行农产品交易系统。我主要负责组织测试人员对该系统进行测试。我们测试分为两个阶段&#xff1a;一、功能测试阶…...

AcWing 1230.K倍区间

AcWing 1230. K倍区间 题目描述 给定一个长度为 NNN 的数列&#xff0c;A1,A2,…ANA_1, A_2, … A_NA1​,A2​,…AN​ &#xff0c;如果其中一段连续的子序列 Ai,Ai1,…AjA_i, A_{i1}, … A_jAi​,Ai1​,…Aj​ 之和是 KKK 的倍数&#xff0c;我们就称这个区间 [i,j][i,j][i,…...

kubernetes集群部署springcloud项目【AL】【未写完】

kubernetes集群部署springcloud项目【AL】 &#xff08;先手工做&#xff0c;非自动化&#xff09; #环境&#xff1a; 192.168.73.138 master 192.168.73.139 node1 192.168.73.140 node2 192.168.73.137 harbor、mysqlgit clone https://github.com/lizhenliang/simple-…...

各种音频接口比较

时间 参考&#xff1a;https://www.bilibili.com/video/BV1SL4y1q7GZ/?spm_id_from333.337.search-card.all.click&vd_source00bd76f9d6dc090461cddd9f0deb2d51&#xff0c; https://blog.csdn.net/weixin_43794311/article/details/128941346 接口名字时间公司支持格式…...

软件测试面试理论(超详细)

【面试理论知识】1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&#xff0c;按如何做好测试工程师的要点去要求自己…...

c++学习笔记-二进制文件操作(哔站-黑马程序员c++教学视频)

一、基本概念 以二进制的方式对文件进行读写操作 打开方式指定为 ios::binary 优点&#xff1a;可以写入自己定义的数据类型 1、写文件 二进制方式写文件&#xff1a;流对象调用成员write 函数原型&#xff1a;ostream& write(const char * buffer,int len);参数解释…...

内网渗透(二十三)之Windows协议认证和密码抓取-Mimikatz介绍和各种模块使用方法

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…...

Nginx if的使用教程

if指令该指令用来支持条件判断&#xff0c;并根据条件判断结果选择不同的Nginx配置。语法if (condition){...}默认值—位置server、locationcondition为判定条件&#xff0c;可以支持以下写法&#xff1a;1. 变量名。如果变量名对应的值为空字符串或"0"&#xff0c;i…...

备考蓝桥杯【快速排序和归并排序】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…...

Taro使用微信OCR插件无法调用onSuccess回调问题

Taro使用微信插件无法调用onSuccess回调问题小程序后台添加插件在开放社区购买相应的套餐详细步骤1.在app.config.js中添加如下代码2.在页面的page.config.js添加插件3.使用ocr-navigator识别身份证小程序后台添加插件 在开放社区购买相应的套餐 购买地址 详细步骤 1.在app.…...

【Java】代码块的细节你搞懂了吗(基础知识七)

希望像唠嗑一样&#xff0c;one step one futher。 目录 &#xff08;1&#xff09;代码块的应用场景 &#xff08;2&#xff09;代码块的细节 1.static 代码块只加载一次 2.当调用类的静态成员时&#xff0c;类会加载 3. 使用类的静态成员时&#xff0c;static代码块会被执…...

设计模式C++实现12:抽象工厂模式

参考大话设计模式&#xff1b; 详细内容参见大话设计模式一书第十五章&#xff0c;该书使用C#实现&#xff0c;本实验通过C语言实现。 抽象工厂模式&#xff08;Abstract Factory&#xff09;&#xff0c;提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们…...

目标检测论文阅读:GraphFPN算法笔记

标题&#xff1a;GraphFPN: Graph Feature Pyramid Network for Object Detection 会议&#xff1a;ICCV2021 论文地址&#xff1a;https://ieeexplore.ieee.org/document/9710561/ Abstract 特征金字塔已经被证明在需要多尺度特征的图像理解任务中是强大的。SOTA的多尺度特征…...

实测2023款哪吒U-II,智驾功能对女司机很友好

最近&#xff0c;我们受邀试驾了2023款哪吒U-II。这是一款A级新能源SUV&#xff0c;是哪吒U的改款车型。哪吒U系列自2020年3月上市到2023年1月&#xff0c;累计销售数量达76688台&#xff0c;也因此被称为15万级智能天花板。2023款哪吒U-II的一大亮点是&#xff1a;针对以往哪吒…...

Python自动化测试【软件测试最全教程(附笔记、学习路线)】,看完即就业

最近看到很多粉丝在后台私信我&#xff0c;叫我做一期Python自动化测试的教程&#xff0c;其实关于这个问题&#xff0c;我也早就在着手准备了&#xff0c;我录制了一整套完整的Python自动化测试的教程&#xff0c;上传到网盘里了&#xff0c;大家有兴趣的可以去文末交流群免费…...

2023/2/13总结

今天主要学习了哈夫曼树。 哈夫曼树 哈夫曼树是二叉树的一种&#xff0c;它是一种WPL最优二叉树。 叶子结点&#xff08;也称叶节点&#xff09;&#xff1a;指的是自己下面不再连接有节点的节点&#xff08;即末端&#xff09;&#xff0c;称为叶子节点&#xff08;又称为终…...

webSock前端

1.什么是webSocket WebSocket是一种在单个TCP连接上进行全双工通信的协议。允许服务端主动向客户端推送数据。 2.如何使用webSocket WebSocket 构造函数WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。 代码如下: let ws = new WebSocket(网址); 2.websock事件: …...

AcWing 3956. 截断数组(每日一题)

AcWing 3956. 截断数组 题目描述 给定一个长度为 nnn 的数组 a1,a2,…,ana_1, a_2, …, a_na1​,a2​,…,an​ 。 现在&#xff0c;要将该数组从中间截断&#xff0c;得到三个非空子数组。 要求&#xff0c;三个子数组内各元素之和都相等。 请问&#xff0c;共有多少种不同…...

Android 一体机研发之修改系统设置————屏幕亮度

Android 一体机研发之修改系统设置————屏幕亮度 Android 一体机研发之修改系统设置————声音 Android 一体机研发之修改系统设置————自动锁屏 前言 最近工作略微有点儿空闲&#xff0c;抽空给大家总结一下&#xff1a;近期一直搞得一体机app研发&#xff0c;适用…...

C++通用算法

1.概述根据名字就知道如何使用相关算法&#xff0c;比如copy函数&#xff0c;就是复制的意思&#xff0c;它需要一个范围&#xff0c;以及要复制的位置copy(begin, end, container_begin);#include <iostream> #include<vector> #include<algorithm> #includ…...

Springboot停机方式

1. 介绍 简单的说&#xff0c;就是向应用进程发出停止指令之后&#xff0c;能保证正在执行的业务操作不受影响&#xff0c;直到操作运行完毕之后再停止服务。应用程序接收到停止指令之后&#xff0c;会进行如下操作&#xff1a; 1.停止接收新的访问请求 2.正在处理的请求&…...

做动态网站需要什么/网络推广团队哪家好

2016-09-01 01:18齐晓庆 客户经理在加减乘除运算中&#xff0c;运算结果的类型和运算量的类型相同,由于类型不同&#xff0c;所以出错&#xff0c;要达到你目的可以1000\15 1000\25,由于1.5 2.5是小数所以强制转换时出错2016-09-01 01:15齐敦益 客户经理同构数是会出现在它的平…...

12306网站哪个公司做的/百度开发平台

上一篇搭建部署了Jumpserver&#xff0c;但是还未彻底完成&#xff0c;这篇继续接着上一篇搭建部署Jumpserver。 1、test-env hostname ip role cs74s 192.168.10.15 server systemctl stopNetworkManager systemctl disableNetworkManager systemctl stopfirewalld …...

北京做校园的网站/宁德市自然资源局

首先&#xff0c;要说明的问题是&#xff0c;密码文件是驻留在数据库服务器上的一个文件。如果数据库是使用OUI安装的&#xff0c;密码文件是默认生成的。其中维护的具有SYSDBA管理权限的用户信息&#xff0c;也是随着系统运行自动维护的。一般来说&#xff0c;是不需要我们直接…...

写网站建设的软文/关键词推广方式

中新网1月16日电 16日&#xff0c;清华大学公益慈善研究院联合字节跳动发布《互联网生态公益方法论——2018年头条公益年度数据》(以下简称《2018年头条公益年度数据》)&#xff0c;共同探讨移动互联网时代公益内容生产和传播的新方向&#xff0c;让信息更具公益价值。抖音#橙子…...

南京网站设计制作套餐/自己创建网站

版权声明&#xff1a;转载请著名出处 http://blog.csdn.net/qq_23191031。作者: 大圣代 目录(?)[] 内存与内存分配策略概述 1 什么是内存 总结2 Android中的沙盒机制Generational Heap Memory内存模型的概述GC机制概述 1 Dalvik 和标准Java虚拟机的区别 11 Dalvik 和标准Java虚…...

深圳定制网站公司/网址大全下载到桌面

【回复“1024”&#xff0c;送你一个特别推送】原文作者&#xff1a;杨小羊&#xff0c;东篱南山 CEO / 互联网研究者 / 城市微农业倡导者原文地址&#xff1a;https://www.zhihu.com/question/264331588特别声明&#xff1a;本文为杨小羊原创并授权发布&#xff0c;未经原作者…...