python中snap-stanford指导手册(主要用于做图网络)

文章目录

    • Requirement
    • Snap操作手册
      • Basic Types
      • Vector Types
      • Hash Table Types
      • Pair Types
      • Graph and Networks Types(graph和network类型)
      • Node and Edge Operation

Requirement

  • 需要提前安装用于操作图网络的snap库,这个库中有很多现成的图数据库,很方便。
  • 用于图网络显示的两个库分别是
    • Gnuplot用于网络结构性质的绘制
    • Graphviz:用于绘制和可视化小图标记

Snap操作手册

Basic Types

  • Snap中的基础类型是TInt,TFlt和TStr.这些snap中的基础类型能够自动转成python中对应的基础类别int,float,str.总的来说,没有必要使用snap中特定的基础数据类型,因为snap会自动将数据转成相关类型

Vector Types

  • 在snap中vector的仅仅只能保存同一类型的数据,和python中的vector一样,可以通过索引改变特定位置的元素,也可以添加新的值。声明方式基本上都是数据类型后面加个V,会自动生成对应类型的vector.
    在这里插入图片描述

  • 基本上是和python中的vector操作完全一样的,再加上二者是可以相互转换的,所以并没有必要专门学一下。

Hash Table Types

  • 就是键值对,不同于python中的就是所有的key必须要是同样的数据类型,这里哈希表的命名方式和python中的不同,需要在构造函数中就指明是那种类型的数据是key,那种类型的数据是value
  • 下面的代码中是声明了一个key为int,value是str类型的字典。如果要声明一个key为int,value为int的字典,那么只需要写一次就行了,TIntH()即可
    在这里插入图片描述

Pair Types

  • 这里是数据对,相当于c++中的pair数据差不多,(value1,value2)为一个数据单位。声明方式为“T数据类型1数据类型2Pr”,这里需要指明你需要替代的数据类型1和数据类型2
  • 具体实现如下,基本上除了声明之后,就只用的到两个函数,分别是GetVal1和GetVal2
    在这里插入图片描述

Graph and Networks Types(graph和network类型)

  • Snap支持graphs和networks,graphs单纯描述拓扑结构,其中节点拥有唯一的整数标记,节点与节点之间是通过有向边,或者无向边进行连接。网络network是节点或者边带有数据的graph。节点和边上的参数是通过模板参数进行传递的,这样能够处理很多数据。
  • SNAP中的graph如下
    • TUNGraph:无相图,无序节点对之间最多只有可能有一条边
    • TNGraph:有向图,有序节点对之间有一条边
  • network结构如下
    • TNEANet:有向 多重图,并且节点和边上还有相关的属性
  • 一般来说在snap中并不直接使用这些实例,而是使用指向这些实例的智能指针。在python中实际使用的是PUNGraph,PNGraph 和 PNEANet三个类型分别指代TUNGraph,TNGraph和TEANet.

Node and Edge Operation

  • 创建graph和net
G1 = snap.TUNGraph.New()
G2 = snap.TNGraph.New()
N1 = snap.TNEANet.New()
  • 增加节点和边
# 增加节点
G1.AddNode(1)
G1.AddNode(5)
G1.AddNode(32)
# 增加边,前提是节点一定要存在
G1.AddEdge(1,5)
G1.AddEdge(5,1)
G1.AddEdge(5,32)

遍历节点和边

  • 使用迭代器单纯遍历节点
    在这里插入图片描述

  • 使用迭代器遍历边
    在这里插入图片描述

  • 遍历每一个节点的连结的边
    在这里插入图片描述

  • 使用的相关函数

    • GetId():返回节点的编号
    • GetOutDeg():返回节点的出度
    • GetInDeg():返回节点的入度
    • GetOutNId(e)返回第e个边的终点
    • GetInNId(e)返回第e个边的起点
    • IsOutNId(n):判定节点n是否拥有出边
    • IsInNId(n):判定节点n是否拥有入边
    • IsNbrNId(n):判断节点n是否为邻居节点
  • 上述几个代码还是比较重要的,在图的遍历过程中需要。

Saving and Loading Graphs

  • 使用snap你可以将网络保存为不同的格式,虽然snap会将函数保存为紧凑的二进制格式,但是也可以使用不同的文本、xml等格式来保存和加载图片。
  • 这里感觉对我没什么用,因为我主要是操作network,但是这里主要都是给的graph
  • 使用二进制保存和加载网络模型
    在这里插入图片描述
  • 使用文本加载和保存网络模型
# 将文本保存为txt格式
G4.SaveEdgeList("test.txt", "Save as tab-separated list of edges")
# 加载txt文件的格式
G5 = snap.LoadEdgeList(snap.TNGraph, "test.txt", 0, 1)

Graph Manipulation (图操作和处理)

  • Snap支持一些常规的图操作,比如说找到最大的若链接部分,对节点的增删改查等操作
# 随机生成对应的graph图
G6 = snap.GenRndGnm(snap.TNGraph, 10000, 5000)
# 将有向图转为无向图,但是无向图转为有向图是不行的
G7 = G6.ConvertGraph(snap.TUNGraph)
# 找到途中最大的弱链接部分
WccG = G6.GetMxWcc()
# 使用森林火灾模型生成网络模型
G8 = snap.GenForestFire(1000,0.35,0.35)
# 获取特定节点构成的子图,这里是直接提出这几个节点作为子图
SubG = G8.GetSubGraph([0,1,2,3,4])
# 删除所有出度为3,入度为2的节点
G8.DelDegKNodes(3,2)

Computing Structural Properties (计算结构属性)

  • snap拥有很多函数支持计算网络模型的结构属性,同时支持network和graph
  • 设计一个二元数组,来获取链接图的分布,二元数组的构成是(链接图的节点数量,当前的总数)
    在这里插入图片描述
  • 计算整个网络图的度数分布,主要是出度的分布

在这里插入图片描述

  • 获取图的邻接矩阵的特征向量,并以一个vector的形式返回
    在这里插入图片描述

  • 获取图直径的近似

    • 图的直径:任意两个顶点之间的距离的最大值
      在这里插入图片描述
  • 获取图的聚合系数
    在这里插入图片描述

  • 更具体的,这里自己看相关的参考手册

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

字节后端入门 - Go 语言原理与实践

1.1什么是Go语言 1.2Go语言入门 环境 1.3基础语法 1.3.1变量 var name"value" 自己推断变量类型; 也可以显式类型 var c int 1 name: type(value) 常量: const name "value" g : a"foo" 字符串拼接 1.3.2 if else {}花括号…

通过身份个性化网络(IPM)实现真实世界的自动化妆

来源:投稿 作者:小灰灰 编辑:学姐 论文标题: Real-World Automatic Makeup via Identity Preservation Makeup Net 论文链接:https://www.ijcai.org/proceedings/2020/0091.pdf论文代码:https://github.co…

商城订单模块实战 - 数据库设计、ABA问题处理、读写分离分库分表

引言 订单系统可以说是整个电商系统中最重要的一个子系统,因此订单数据可以算作电商企业最重要的数据资产。这篇文章我们来看看在我们的商城系统中订单服务是如何实现的,特别是在设计和实现一个订单系统的过程中有哪些问题是需要特别考虑的。 业务分析…

【笔记】cuda大师班1-4

一.基本概念 进程(process)一个正在被执行的计算机程序的实例 上下文(context):待处理数据的集合,允许处理器暂停,保持处理的执行和恢复处理 并发:上下文切换,主要应用于…

二叉搜索树中的众数

1题目 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&…

用Python分析周杰伦歌曲并进行数据可视化

大家好,今天我们用python分析下周杰伦歌曲。为了尽量完整地呈现从原始数据到可视化的过程,接下来我们会先简单讲解数据的预处理过程,即如何将 JSON 数据转化为Excel 格式,以及如何对周杰伦的歌曲进行分词。 本案例中的歌词数据来…

对顶堆模板!!【DS对顶堆】ABC281 E - Least Elements

我想的思路和正解是差不多的 就是滑动窗口,每过去一个用DS维护一下前k个元素和sum 本来想的是用优先队列维护前k个 然后想着multiset维护前k个,但是具体不知道怎么操作 这里用的是multiset维护对顶堆 关于对顶堆,我在寒假的时候总结过 …

从根本上理解Synchronized的加锁过程

作为一个Java开发,对于Synchronized这个关键字并不会陌生,无论是并发编程,还是与面试官对线,Synchronized可以说是必不可少。 在JDK1.6之前,都认为Synchronized是一个非常笨重的锁,就是在之前的《谈谈Java…

ChatGPT真的有那么牛吗?

ChatGPT真的有那么牛吗?ChatGPT真的有那么牛吗? 作为一款大型语言模型,ChatGPT确实具有很高的自然语言处理和生成能力,可以生成流畅、准确和有逻辑性的语言,而且能够理解和回答广泛的问题。 它是目前最先进和最强大的…

八股+面经

文章目录 项目介绍1.不动产项目数据机器学习算法调研图像提取算法调研数据集-ImageNetXceptionVGGInceptionDensenetMobilenet 2.图书项目技术栈面试问题 Java基础反射接口和抽象类MapHashMap v.s Hashtable(5点)ConcurrentHashMap v.s Hashtable(2点)代理模式1. 静态代理2. 动…

Rust - 变量与数据的交互方式(clone)

在上一篇文章中我们介绍了变量与数据的交互方式-move,通过底层原理我们知道Rust 永远也不会自动创建数据的 “深拷贝”。因此,任何 自动的复制可以被认为对运行时性能影响较小。 但是如果我们 确实需要深度复制 String中堆上的数据,而不仅仅…

mitmproxy抓包

0.mitmproxy功能简介 实时拦截、修改 HTTP/HTTPS 请求和响应可保存完整的 http 会话,方便后续分析和重放支持反向代理模式将流量转发到指定服务器支持 macOS 和 Linux上的透明代理模式支持用 Python 脚本对 HTTP 通信进行修改 1. 安装mitmproxy pip3 install mit…

你知道如何使用C语言实现递归吗?

本篇博客会讲解如何使用C语言实现递归,以及2个注意事项。 递归是什么 递归,简单来说,就是自己调用自己。C语言中,可以使用函数来实现递归,也就是让一个函数自己调用自己。举一个简单的例子: 请你求斐波…

考验大家指针功底的时候到了:请问如何理解 (int*)1 + 1 ?

来,猜猜看,这里的执行结果是什么? 这是今天课上的一道理解题,给大家一点点思考时间。 (心里有答案了再往下滑哦) 5 4 3 2 1 . 答案是,报warning!因为%d不是用来输出指针的哈…

PromQL,让你轻松实现监控可视化!快来了解一下吧!

Prometheus 中的一些关键设计,比如注重标准和生态、监控目标动态发现机制、PromQL等。 PromQL 是 Prometheus 的查询语言,使用灵活方便,但很多人不知道如何更好利用它,发挥不出优势。 PromQL主要用于时序数据的查询和二次计算场…

学习系统编程No.23【信号实战】

引言: 北京时间:2023/4/23,最近学习状态不怎么好,总是犯困,没精力的感觉,可能是病没有好彻底的原因,也可能是我内心因为生病而认为摆烂理所应当,反正最后导致摆烂,课现在…

Postman预请求脚本、测试脚本(pre-request scripts、tests常用工作总结)

文章目录 Postman预请求脚本(pre-request scripts工作常用总结)Postman预请求脚本Postman测试脚本预请求脚本和测试脚本有什么区别常用工作总结登录接口返回的是Set-Cookie标头 Postman预请求脚本(pre-request scripts工作常用总结&#xff0…

2008-2019年主要城市PITI指数

2008-2019年主要城市PITI指数 1、来源:附在文件内 2、时间区间:2008-2019年 3、具体时间分布:、2008、2009-2010、2011、2012、2013-2014、2014-2015、2015-2016、2016-2017、2017-2018、2018-2019、 4、范围:包括110个城市&a…

Afkayas.1(★)

软件运行 要输入正确的Name和Serial 查壳 一个VB程序,没有加壳 载入OD 直接开搜索字符串。 这里看到了错误的提示,“You Get It”应该就是成功的字符串了。 前面的“AKA-”应该是在什么时候拼接的字符串 去成功的字符串附近看看 这个字符串上面…

网络编程 总结三

一、并发服务器模型 【1】 循环服务器 1>一次只能处理一个客户端的请求,等待这个客户端退出后,才能处理下一个客户端 2>缺点:循环服务器所处理的客户端不能有耗时操作 //*****模型****** sfd socket(); bind(); listen(); while(1)…