Igraph入门指南 1

Igraph入门指南

一、图的结构

图是顶点和边的集合,而边是通过顶点来描述。顶点和边,要用集合的理念去操作。

1、igraph中与图结构相关的函数

 +.igraph(),
add_edges(), add_vertices(), 
complementer(),compose(), connect(), contract(), 
delete_edges(), delete_vertices(), 
difference(), difference.igraph(),
disjoint_union(),
edge(), 
igraph-minus, intersection(), intersection.igraph(), 
path(),
permute(),
rep.igraph(), reverse_edges(), 
simplify(), union(), union.igraph(), 
vertex()

2、图的基本要素——顶点(vertex)

2-1 检索顶点序列:V(g)函数

V(g)得到图的顶点序列。这个顶点序列通常用作igraph其他函数的参数,用于指代图的顶点。顶点序列被限定到具体图的特定顶点,一个图的V(g)不能与另一个图一起使用。

在实现级别上,顶点序列只是一个包含数字顶点id的向量,但它有一个特殊的类属性,可以对其执行特定于图的操作,例如基于图结构或顶点属性选择顶点的子集。

# 未名图的顶点id
> g <- make_ring(10)
> V(g)
+ 10/10 vertices, from d684cd6:
 [1]  1  2  3  4  5  6  7  8  9 10


# 命名图的顶点id
> g <- make_ring(10) %>% set_vertex_attr('name',value=letters[1:10])
> V(g)
+ 10/10 vertices, named, from 2f141f4:
 [1] a b c d e f g h i j

 # 注意,命名图的名只能用'name',用'label'不会给图的顶点命名
 > g <- make_ring(10) %>% set_vertex_attr('label',value=letters[1:10])
> V(g)
+ 10/10 vertices, from 935689e:
 [1]  1  2  3  4  5  6  7  8  9 10

顶点序列通常由V(g)函数创建。这样做的结果包括按顶点id递增顺序排列的所有顶点。顶点序列可以通过数字向量进行索引,就像其他R向量一样。

V(g)可以查询或设置图顶点的所有属性,在实际操作中,可以把V(g)的结果当作一个对象,与图顶点相关的属性是这个对象的属性(也就是变量),可以通过V(g)$attrib的语法来访问和设置这些顶点属性,这与面向对象编程的语法也是相似的。

> V(g)[3:5]
+ 3/10 vertices, from 935689e:
[1] 3 4 5
> V(g)[3:5]$color <- 'red'
> plot(g)

在这里插入图片描述

顶点序列可以像普通的数字R向量一样进行索引,但需要一些额外的功能。

2-2 V(g)的二次检索:[] & [[]]函数(igraph-vs-indexing)

在igraph中,顶点序列可以使用单方括号和双双括号运算符进行索引,并且它们的工作方式相同。它们之间唯一的区别是双方括号操作符会标记打印顶点属性的结果。

方括号中的索引共有正数向量、负数向量、逻辑向量、字符向量四种模式:

  • 用正数向量进行索引时,会选择序列中给定位置的顶点。

  • 用负数值向量进行索引时,序列中给定位置的顶点将被省略。

  • 用逻辑向量进行索引时,顶点序列的长度和索引必须匹配,并选择索引为TRUE的顶点。

  • 命名图可以使用字符向量进行索引,以选择具有给定名称的顶点。

在命名图中,可以用V(g)[name=="foo"](等价于V(g)[V(g)$name=="foo"]的语法索引图的顶点,假如当前环境中有一个变量的名字也叫 foo, igraph会优先引用顶点名,如果想引用变量,需要用V(g)[.env$foo]

# 顶点名优先
> V(g)[.env$soo]$color <- 'orange'
> plot(g)
> foo <- 'pee'
> g <- make_ring(3) %>% set_vertex_attr('name',value=c('foo','pee','duu'))
> V(g)[name=='foo']$color <- 'red'
> plot(g)

# 引用环境中的变量需要加前缀.env$
> V(g)[.env$soo]$color <- 'orange'
> plot(g)

在这里插入图片描述

方括号中可以使用表达式,igraph并提供了几个专用函数

.nei:邻居,将顶点序列作为其参数,并选择这些顶点的邻居。如果是有向图,还可以通过mode=“out”mode=”in“来设置邻居的模式。

> g <- make_graph(c(1, 2, 2, 3, 2, 4, 4, 2,5,6))
> plot(g)
> V(g)[.nei(c(2, 5))]
+ 4/6 vertices, from 7205bdc:
[1] 1 3 4 6
> V(g)[.nei(c(2, 4), "in")]
+ 3/6 vertices, from 7205bdc:
[1] 1 2 4
> V(g)[.nei(c(2, 5), "in")]
+ 2/6 vertices, from 7205bdc:
[1] 1 4
> V(g)[.nei(c(2, 5), "out")]
+ 3/6 vertices, from 7205bdc:
[1] 3 4 6

在这里插入图片描述

前面说过,顶点的属性可以视为对象的属性(变量),所以也可以用这些属性的值来检索顶点

g <- make_graph(~ A -+ B, B -+ C:D, D -+ B)
V(g)$color <- c("red", "red", "green", "green")
V(g)[color == "red"]
+ 2/4 vertices, named, from e0ac217:
[1] A B

注意[[[的区别,[[可以打印顶点的所有属性

> g <- make_ring(10) %>% 
+   set_vertex_attr('name',value=letters[1:10]) %>% 
+   set_vertex_attr('color',value='red')
 V(g)
+ 10/10 vertices, named, from 8ea2563:
 [1] a b c d e f g h i j
> V(g)[]
+ 10/10 vertices, named, from 8ea2563:
 [1] a b c d e f g h i j
> V(g)[[]]
+ 10/10 vertices, named, from 8ea2563:
   name color
1     a   red
2     b   red
3     c   red
4     d   red
5     e   red
2-3 显示全部或指定顶点的属性:vertex_attr函数

函数参数可以提供属性的名称,如果不提供该参数,则打印所有属性

可以通过指定顶点的索引号来限制显示的具体内容

> vertex_attr(g)
$name
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"

$color
 [1] "red" "red" "red" "red" "red" "red" "red" "red" "red" "red"

> vertex_attr(g,'color')
 [1] "red" "red" "red" "red" "red" "red" "red" "red" "red" "red"
> vertex_attr(g,'name',4:7)
[1] "d" "e" "f" "g"
2-4 只显示顶点属性名:vertex_attr_names函数
> vertex_attr_names(g)
[1] "name"  "color"
2-5 设置指定顶点的属性:vertex_attr <-函数,单独使用,每次调用可以同时设置多个属性
q <- make_ring(10)
vertex_attr(q)<-list('label'=LETTERS[1:10],
                     'color'=rep('red',gorder(g)))

本函数有两个坑:

一是需要用list()包裹各个属性;

二是属性值必须是gorder(g)长度的向量,如果是单一值,比如color='red',需要用rep()函数来确保向量长度符合要求

本函数与set_vertex_attr()对比:

从帮助文件示例看,set_vertex_attr()用在图创建过程中,可以接在make_函数后面,而本函数却是独立成行,不能用在make_函数后面,因为本函数带有赋值函数<-,自然无法用在管道函数中间

2-6 设置指定顶点的属性:with_vertex_函数,在管道函数中使用,每次调用可以同时设置多个属性

用于添加顶点属性的构造函数修饰符

vertex_attr <-相比:

一是不需要list()

二是两者设置顶点属性都用‘名=值’的形式

三是本函数中的属性值不必须具备固定长度

四是本函数中的属性名不能加引号

五是本函数似乎只能用在make_

六是本函数用在管道函数中,得到的对象是igraph_constructor_modifier

> make_(ring(10),
+   with_vertex_(
+     color='red',
+     weight=3,
+     name=letters[1:10]
+   )) %>%vertex_attr()
$color
 [1] "red" "red" "red" "red" "red" "red" "red" "red" "red" "red"

$weight
 [1] 3 3 3 3 3 3 3 3 3 3

$name
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
2-7 设置顶点属性:set_vertex_attr函数,在管道函数中使用,每次调用只能设置一个属性
> g <- make_ring(10) %>% 
+   set_vertex_attr('name',value=letters[1:10]) %>% 
+   set_vertex_attr('color',value='red')
2-8 设置顶点属性:语法糖V(g)$,每次调用只能设置一个属性
> V(g)$weight <- 3
> V(g)[[]]
+ 10/10 vertices, named, from 8ea2563:
   name color weight
1     a   red      3
2     b   red      3
3     c   red      3
4     d   red      3

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

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

相关文章

自我对比: 通过不一致的解决视角更好地进行反思

一、写作动机&#xff1a; LLM 在自我评价时往往过于自信或随意性较大&#xff0c;提供的反馈固执或不一致&#xff0c;从而导致反思效果不佳。为了解决这个问题&#xff0c;作者提倡 "自我对比"&#xff1a; 它可以根据要求探索不同的解决角度&#xff0c;对比差异…

并发编程并发安全性之Lock锁及原理分析

ReentrantLock 用途:锁是用来解决线程安全问题的 重入锁-> 互斥锁 满足线程的互斥性意味着同一个时刻&#xff0c;只允许一个线程进入到加锁的代码中。多线程环境下&#xff0c;满足线程的顺序访问 锁的设计猜想 一定会涉及到锁的抢占&#xff0c;需要有一个标记来实现互…

论文学习—Model-based Adversarial Meta-Reinforcement Learning

Model-based Adversarial Meta-Reinforcement Learning Abstract1. Introduction2. Related work3 Preliminaries基于模型的强化学习&#xff08;MBRL&#xff09;:区别和联系&#xff1a; 4 Model-based Adversarial Meta-Reinforcement Learning4.1 Formulation 4.2 Computin…

java实现文件上传到本地

很多时候我们都需要进行文件上传和下载的操作&#xff0c;具体怎么实现网上的代码其实也是挺多的&#xff0c;刚好我的项目中也遇到了文件上传和下载的需求&#xff0c;本篇博文具体讲解上传操作&#xff0c;下篇博文讲解下载操作。 我们具体来想一想要将一个从前端传来的文件…

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁?

在模块化原理图时,PCB也需要做一个模块.mdd文件。这时需要先画好图纸然后再制作模块化文件。 修改文件时会发现模块化器件报错,无法编辑模块内部器件和走线,器件和走线都被LOCKED,如下所示报错内容: Symbol "U1" Selected Cannot edit Symbol "U1". M…

磁性机器人在医学领域取得进展

磁性医疗机器人利用磁场梯度来控制设备的运动&#xff0c;并最终以高精度进入体内的目标组织。这些磁性机器人可以采用导管和微型或纳米机器人的形式&#xff0c;并由磁导航系统操纵。磁性机器人最近取得了一些进展&#xff0c;为临床诊断和治疗用途开辟了新的可能性。在本期的…

数据结构与算法:堆排序和TOP-K问题

朋友们大家好&#xff0c;本节内容来到堆的应用&#xff1a;堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序&#xff0c;冒泡排序&#xff0c;快速排序&#xff08;qsor…

2024.3.5

作业1、使用select实现tcp服务器端&#xff0c;poll实现tcp客户端 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.131" //服务端IP #define SER_PORT 8888 //服务端端口号int main(int argc, const char *argv[])…

星瑞格数据库管理系统

一. 产品介绍 随着信息化的到来&#xff0c;数据安全成为保障信息化建设的一个关键问题&#xff1b;数据库作为信息化系统的基础软件其自身安全以及对数据的保障是至关重要。现阶段国内重要部门的信息系统存放着大量敏感数据&#xff0c;为了保障其数据的安全性&#xff0c;使用…

Mathcad tips_table相关

1. 可以插入表格&#xff0c;或者2. 从excel 文件导入 选择列 选择其中一行的数值

Batch Normalization和Layer Normalization和Group normalization

文章目录 前言一、Group normalization二、批量规范化(Batch Normalization)三、层规范化&#xff08;Layer Normalization&#xff09; 前言 批量规范化和层规范化在神经网络中的每个批次或每个层上进行规范化&#xff0c;而GroupNorm将特征分成多个组&#xff0c;并在每个组内…

HarmonyOS创建项目和应用—设置数据处理位置

项目和应用介绍 关于项目 项目是资源、应用的组织实体。资源包括服务器、数据库、存储&#xff0c;以及您的应用、终端用户的数据等。在您使用部分服务时&#xff0c;您是数据的控制者&#xff0c;数据将按照您设置的数据处理位置来存储在指定区域。 通常&#xff0c;您不需…

Mybatis实现分页查询数据(代码实操讲解)

在MyBatis中实现分页查询的常见方式有两种&#xff1a;使用MyBatis内置的分页插件如PageHelper&#xff0c;或者手动编写分页的SQL语句。下面我将为你提供两种方式的示例代码。 使用PageHelper分页插件 首先&#xff0c;确保你的项目中已经添加了PageHelper的依赖。在Maven项…

ZYNQ--关于一些SDK调试问题记录

Debug configuaration中没有debug applicaton 问题如下图&#xff1a; 解决方法&#xff1a; 在Target Setup中的Debug Type中选择如下即可 注意选完之后application中必须勾选运行内核&#xff0c;否则不运行main文件。

Java项目:36 springboot图书个性化推荐系统的设计与实现003

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员&#xff1a;首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退…

2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)

活动 - AcWing 深海资源考察探险队的潜艇将到达深海的海底进行科学考察。 潜艇内有多个深海机器人。 潜艇到达深海海底后&#xff0c;深海机器人将离开潜艇向预定目标移动。 深海机器人在移动中还必须沿途采集海底生物标本。 沿途生物标本由最先遇到它的深海机器人完成采…

vue3基础教程(2)——创建vue3+vite项目

博主个人微信小程序已经上线&#xff1a;【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 前言2.node版本检测3.创建vue项目 专栏简介 本系列文章由浅入深&#xff0c;从基础知识到实战开发&#xff0c;非常适合入门同学。 零基础读者也能成功由本系列文章入门&#x…

循环队列:一道使数据结构萌新知道什么是“愁滋味“的题目

这破题目肝了我一天半才搞明白,也正是因为这道题目,我才豁然明白了李煜所说的"剪不断,理还乱...别是一般滋味在心头"到底是什么"滋味".在完全搞明白之前,真的是放有放不下,理也理不清... 但是理解之后你会发现,嘛い---,也就那么个回事嘛O(∩_∩)O 目录 1…

【DreamTalk】源码部署

安装 # 下载源码 git clone https://github.com/ali-vilab/dreamtalk cd dreamtalkconda create -n dreamtalk python3.10 conda activate dreamtalkconda install -c conda-forge yacs0.1.8 conda install -c conda-forge numpy1.21.5 conda install -c conda-forge av10.0.0…

如何使用宝塔面板部署MySQL数据库,并结合内网穿透实现固定公网地址远程连接

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.1 开放局域网端口3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几…