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

news2024/11/28 0:58:51

文章目录

    • 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的形式返回
    在这里插入图片描述

  • 获取图直径的近似

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

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

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

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

相关文章

物联网平台:一文读懂什么是物模型

文章目录 一、什么是物模型二、标准参数(1)标准参数的意义 三、物模型字段详细说明(1)物模型的每个属性包含以下字段(2)物模型的每个方法包含以下字段(3)物模型的每个事件包含以下字…

【Python】【进阶篇】15、如何启动Django项目详解

目录 如何启动Django项目详解1. 启动项目并实现访问1) 启动项目命令介绍2) manage.py文件子命令 如何启动Django项目详解 我们使用 django-admin 命令成功创建项目后,我们要如何启动这个项目呢?本节的学习目标是能够通过本地回送地址 127.0.0.1 成功访问…

第十一章 Transform组件(上)

本章节我们介绍Transform类,它是一个组件,每一个游戏对象有拥有该组件。因此,它值得我们重点介绍一下。Transform代表了游戏对象的世界变换,也就是移动,选择和缩放。 首先,我们先介绍它的属性(…

Linux Ansible角色介绍

目录 角色的基础结构 角色来源与应用 Galaxy角色 系统角色 自定义角色 角色(roles)用于层次化、结构化地组织playbookroles通过标准化目录结构来装载变量文件、tasks(模块任务)、handlers(处理程序)、…

标准ACL配置

标准ACL配置 【实验目的】 掌握标准ACL的配置。 验证配置。 【实验拓扑】 实验拓扑如图1所示。 图1 实验拓扑 设备参数如表所示。 表1 设备参数表 设备 接口 IP地址 子网掩码 默认网关 R1 S0/3/0 192.168.1.1 255.255.255.252 N/A Gi0/0/0 192.168.2.1 255.…

大数据分析利器之Power BI,你是否已经掌握?(文末送书)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

【校招VIP】IT职位校招简历千万不要用两栏的模板,另外,告诉你个陷阱:越个性机会越少

前两天在简历指导的直播里,发现了不应该出现的一种简历格式问题。 有的同学喜欢用那种竖栏两栏的简历模板。 我们建议研发岗的校招,简历不要这么去写。 因为两栏的话,实际上有一个很大的问题。 因为简历上需要写项目经历,需要写…

你最关心的4个零代码问题,ChatGPT 帮你解答了!

作为人工智能(AI)新型聊天机器人模型 ChatGPT,刚上线5天就突破100万用户,两个多月全球用户量破亿,不愧为业界最炙热的当红炸子鸡。 ChatGPT 是一种语言生成模型,由 OpenAI 开发和训练。它是基于 Transform…

C语言函数大全-- s 开头的函数(1)

C语言函数大全 本篇介绍C语言函数大全-- s 开头的函数(1) 1. sbrk 1.1 函数说明 函数声明函数功能void *sbrk(intptr_t increment);它是一个 Unix 系统的函数,用于调整程序的堆空间。 参数: increment : 增加的堆空…

机器学习算法系列(五)-- 支持向量机(SVM)

机器学习算法系列之–支持向量机(揭开SVM的神秘面纱) 支持向量机(Support Vector Machine :SVM):二分类算法模型,数据集较小时,分类效果甚至优于神经网络。 其最大的特点在于&#x…

C++ muduo日志库的使用

muduo日志库的使用 一、引用二、使用方法2.1、引入头文件2.2、 启动日志库2.3、记录日志2.4、输出格式2.5、日志滚动 三、总结 一、引用 muduo是一个高性能的网络库,它的日志库采用了异步、多线程的方式来记录日志,其主要特点包括: 能够按大…

使用Pano2VR实现全景图切换和平面图效果

内容简介 本文在文章《使用Pano2VR实现背景音乐、放大/缩小、旋转、缩略图和直线/立体/鱼眼模式等》基础上,增加全景图切换和平面图效果;效果如下图(为了可以上传缩小屏幕,属于PC端运行): 实现过程 1. 运行…

【Bus】编写一个Demo虚拟的总线-设备-驱动模型

文章目录 1. 前言2. 总线驱动模型三要素2.1 总线2.2 设备2.3 驱动 3. Demo Code3.1 virt_bus_core.c3.2 virt_device.c3.3 virt_driver.c 4. 工程代码下载地址5. 参考资料 1. 前言 Linux平台为了驱动的可重用性,虚拟了很多的虚拟总线。很经典的就是platform总线&am…

Android Room数据库如何使用增删改查

先看运行效果图。 1.在app下的build.gradle。在dependencies{}闭包中添加如下依赖 //roomdef room_version "2.3.0"implementation "androidx.room:room-runtime:$room_version"annotationProcessor "androidx.room:room-compiler:$room_version&q…

爱奇艺DRM修炼之路

01 DRM的定义和作用 DRM,即数字版权管理(digital rights management),是在数字内容交易过程中,对知识产权进行保护的技术、工具和处理过程。它的目的是防止数字内容被未经授权的用户复制、修改和分发,以保护…

解读TaskMatrix.AI

ChatGPT在广泛的开放域任务上展现出令人瞩目的强大对话、上下文学习和代码生成能力,而且它所获得的常识知识还可以为特定领域的任务生成高级解决方案概要。不过,除了更强大的学习、理解和生成能力,ChatGPT还有哪些问题需要解决呢?…

《利用光体积描记图信号的模糊递推特性估计无袖带血压的级联卷积神经网络模型》阅读笔记

目录 一、论文摘要 二、论文十问 Q1:论文试图解决什么问题? Q2:这是否是一个新的问题? Q3:这篇文章要验证一个什么科学假设? Q4:有哪些相关研究?如何归类?谁是这一…

城市的智能进化,汇成数字中国的璀璨银河

著名城市规划理论家刘易斯芒福德在《城市发展史——起源、演变和前景》中提出,“城市从其起源时代开始便是一种特殊的构造,它专门用来储存并流传人类文明的成果。这种构造致密而紧凑,足以用最小的空间容纳更多的设施。” 他认为,城…

我们如何将 Amazon Snowcone 送入轨道

我从 4 或 5 岁起就一直是太空旅行和美国太空计划的粉丝。我记得读过关于水星和双子星座计划的文章,兴奋地看着鹰号登月舱降落在月球上。 如今,随着每次发射到达近地轨道 (LEO) 的成本似乎都在不断下降,因此有比以往任何时候都要更多的机会&…

建设元宇宙基础设施——PPIO边缘云在云渲染/云游戏的思考和实践

关于“元宇宙”的讨论越发火热,而建设元宇宙不可避免需要布设基础设施,LiveVideoStackCon 2022 北京站邀请到PPIO边缘云联合创始人——王闻宇,同大家探讨元宇宙网络时延的最优解–边缘云基础设施的架构与建设,并介绍PPIO边缘云在泛…