官方参考文档http://www.cs.rhul.ac.uk/home/tamas/development/igraph/tutorial/tutorial.html

Starting igraph

从igraph模块中导入所有函数

from igraph import *
g = Graph(1) # 此时的graph只有1个顶点,0条边
print(g)

Out: IGRAPH U— 1 0 –

add_vertices()

Graph.add_vertices()的作用是给graph添加顶点数,并且返回这个graph

g.add_vertices(2)    # 此时的graph有3个顶点,0条边

graph的顶点从0开始标号,即3个顶点对应编号为0, 1, 2

add_edges()

1.Graph.add_edges()的作用是添加边的,边必须由整数对指定,比如(0, 1)表示顶点0与顶点1之间添加边
2.函数添加边时需要列表符号[]
3.当添加的边的顶点编号不存在比如g.add_edges((5, 0)),程序报错
4.边也存在编号,同样是从0开始

g.add_edges([(0, 1), (1, 2)])    # 此时的graph有3个顶点,2条边
# 添加更多的边和顶点数
g.add_edges([(2, 0)])
g.add_vertices(3)
g.add_edges([(2, 3), (3, 4), (4, 5), (5, 3)])

Out: IGRAPH U— 6 7 –
edges: 0–1 1–2 0–2 2–3 3–4 4–5 3–5
此时的graph (无向图)6个顶点,7条边;edges表示哪些顶点之间存在边的关系

delete_edges()

delete_edges()作用为边的删除,函数需要由边的编号组成的列表或者是单独的边的编号

delete_vertices()

1.delete_edges()作用为顶点的删除,函数需要由顶点的编号组成的列表或者是单独的顶点的编号

get_eid()

get_eid作用为获取连接两个顶点边的编号,当你不知道需要删除的边的编号时,可以使用这个函数

g.get_eid(2, 3)      # out: 3
# 此时graph删除编号为3的边
g.delete_edges(3)
print(g)

Out: IGRAPH U— 6 6 –
edges: 0–1 1–2 0–2 3–4 4–5 3–5

summary()

summary()作用是获取给定的graph的概述
1.列举出边和顶点的个数
2.检查图有向或无向
3.计算图连通分量的个数
4.计算图的直径, 边缘密度,平均路径的长度

summary(g)

官方文档上的结果是 :
Out: 6 vertices, 6 edges, undirected
Number of components: 2
Diameter: 1
Density: 0.4000
Average path length: 1.0000

我自己运行的结果是:
Out: IGRAPH U— 6 6 –
不知道哪里出了问题,可能跟igraph的版本有关

Generating graphs

igraph包含了大量的图生成器,具体可以被分为两大类,确定性图生成器和随机性图生成器
确定性图生成器:只要输入相同的参数,就会生成相同的图
随机性图生成器即每次都生成不同的图

Graph.Tree()

Graph.Tree()作用是生成一个常规的树形图

g1 = Graph.Tree(127, 2)
summary(g1)

Out: IGRAPH U— 127 126 –
生成127个节点;除叶子节点,每个节点有两个子节点

只要参数不改变,生成的图都是一样的

g2 = Graph.Tree(127, 2)

get_edgelist()

get_edgelist()作用是返回包含整数对的列表
其中的整数对就是边两端的顶点整数对

g2.get_edgelist() == g1.get_edgelist() # out:  True

证明了 只要参数不改变,生成的图都是一样的

输出前10条边对应的顶点整数对

print(g2.get_edgelist()[0: 10])

Out: [(0, 1), (0, 2), (1, 3), (1, 4), (2, 5), (2, 6), (3, 7), (3, 8), (4, 9), (4, 10)]

Graph.GRG()

Graph.GRG()作用是生成一个几何随机图
原理是在单位正方形里随机均匀的选择n个点,任意两个点之间的距离如果比预定的距离d小,就用边相连

g1 = Graph.GRG(100, 0.2)
summary(g1)

Out: IGRAPH U— 100 509 –
因为是随机生成图,无论是同一个参数,同一台电脑,每次生成的图都不一样
验证:

g2 = Graph.GRG(100, 0.2)
g1.get_edgelist() == g2.get_edgelist()

Out: False

isomorphic()

isomorphic()作用是判断两个图是不是同构图,即两个图是否完全等价
原理是检查两个图顶点的度

g1.isomorphic(g2)

Out: False

Setting and retrieving attributes

手动创建一个设想中的社交关系图 顶点表示人,边代表他们之间的社交关系

g = Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)])

vs和es

创建额外的列表储存信息与顶点ID相关联 每个Graph都包含两个特殊的成员: vs表示所有顶点的序列;es表示所有边的序列 如果使用vs或es作为字典,可以操作图的属性存储区域

g.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"]
g.vs["age"] = [25, 31, 18, 47, 22, 23, 50]
g.vs["gender"] = ["f", "m", "f", "m", "f", "m", "m"]
g.es["is_formal"] = [False, False, True, True, True, False, True, False, False]

当使用vs或es作为字典,都在将属性分配给图的所有顶点或边;
可以使用下标索引号对单独的顶点或边进行修改

g.es[0]

Out: igraph.Edge(<igraph.Graph object at 0x000002CA4CDB1228>, 0, {‘is_formal’: False})

g.es[0].attributes()

Out: {‘is_formal’: False}

g.es[0]["is_formal"]

Out: False

使用下标索引号对属性进行修改

g.es[0]["is_formal"] = True
g.es[0]["is_formal"]

Out: True

attributes()

无论是单独的索引号还是使用attributes()函数,都会输出此顶点或边的对应信息

g.vs[0]

Out: igraph.Vertex(<igraph.Graph object at 0x000002CA4CDB1228>, 0, {‘name’: ‘Alice’, ‘age’: 25, ‘gender’: ‘f’})

g.vs[0].attributes()

Out: {‘age’: 25, ‘gender’: ‘f’, ‘name’: ‘Alice’}

Grap本身也可以作为一个字典, 为整个图分配属性

g["date"] = "2021-10-30"
print(g["date"])

Out: 2021-10-30

del

del是python的关键词,可以直接删除属性

g.vs[3]["foo"] = "bar"
g.vs["foo"]

Out: [None, None, None, ‘bar’, None, None, None]

del g.vs["foo"]
g.vs["foo"]

Out: ‘Attribute does not exist’

Structural properties of graphs

igraph提供了很多函数计算不同图的结构属性

degree()

计算顶点的度
如果图是有向图,可以使用degree(type=“in”)和degree(type=“out”)计算入度和出度

g.degree()

Out: [3, 1, 4, 3, 2, 3, 2]

也可以输入单个顶点ID或者是一个列表的顶点ID查询,如果省略括号内的内容就默认为顶点的集合

g.degree(6)
g.degree([2, 3, 4])

Out: 2
Out: [4, 3, 2]

未完待续

igraph基本用法相关推荐

  1. Statistical Analysis of Network Data with R(第二版) 上机实操 3

    4.2.1 节点的度 顶点的度是与顶点相连的边的数量,注意是边的数量.不是顶点的数量,因为存在多重边 > g <- make_ring(10) > plot(g) > degr ...

  2. 采用igraph包分析网络数据

    欢迎关注微信公众号<生信修炼手册>! 对于网络的可视化和数据挖掘,有很多图形界面的软件可供选择,比如cytoscape, gephi 等等,这些软件使用方便,操作简单,功能的强大,但是同时 ...

  3. R语言中igraph包的使用(邻接矩阵)

    先导入igraph包: library(igraph) graph包最简单的用法就是graph方法,两句代码就完成绘制如下所示,1的loop表示为(1,1),1和2之间有3条edge,表示为(1,2, ...

  4. R语言igraph软件包方法

    一.igraph软件包创建图和网络 R语言的术语网络是加权无向图和加权有向图.igraph 是一个独立的库,底层是 C,上层有 Python 和 R 接口,主要做图和网络方面的计算,附带绘图功能. 调 ...

  5. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  6. Pandas_transform的用法

    先来看一个实例问题. 如下销售数据中展现了三笔订单,每笔订单买了多种商品,求每种商品销售额占该笔订单总金额的比例.例如第一条数据的最终结果为:235.83 / (235.83+232.32+107.9 ...

  7. Python中yield和yield from的用法

    yield 后面接的是 future 对象 调用方 委托生成器 yield from 直接给出循环后的结果 yield from 委托者和子生成器直接通信 yield from 直接处理stopIte ...

  8. pytorch学习 中 torch.squeeze() 和torch.unsqueeze()的用法

    squeeze的用法主要就是对数据的维度进行压缩或者解压. 先看torch.squeeze() 这个函数主要对数据的维度进行压缩,去掉维数为1的的维度,比如是一行或者一列这种,一个一行三列(1,3)的 ...

  9. python yield 和 yield from用法总结

    #例1. 简单输出斐波那契數列前 N 个数 #缺点:该函数可复用性较差,因为 fab 函数返回 None,其他函数无法获得该函数生成的数列 #要提高 fab 函数的可复用性,最好不要直接打印出数列,而 ...

最新文章

  1. 模拟线程切换 C++
  2. 字符串扩展_JAVA
  3. Android与Javascript交互示例(二)
  4. CentOS 环境下配置MySQL8.0
  5. C0304 备份最后一天所有修改的文件
  6. python中的数组是什么_Python中的数组
  7. GBin1专题之Web热点秀#15
  8. html怎么关闭组合页面,html - 向HTML页面添加内部包装div [关闭] - 堆栈内存溢出
  9. ASP.NET Forms权限验证
  10. 智能家居简单实现---使用ESP8266简单实现和APP通讯
  11. .net core2 单元测试
  12. 新版代shua社区源码(云商城1.0)
  13. android 安装包反编译,Android逆向之反编译APK和安装包漏洞解析
  14. 2021-06-18
  15. CART 分类决策树
  16. 分享抖音上热门技巧!短视频涨粉+运营攻略!
  17. 使用vue-giant-tree根据id定位位置
  18. 60秒轻松计算出任意一年任意一天星期几?
  19. unity入门精要之第6 章 Unity 中的基础光照概述-1
  20. error [XXX.zip]: start of central directory not found; zipfile corrup

热门文章

  1. 树莓派3B+增加虚拟内存
  2. C++中的防卫式声明
  3. php不能撤销,word2010突然无法撤销怎么解决
  4. H5实现调用本地摄像头实现实时视频以及拍照功能
  5. (二)Java并行程序基础
  6. Linux systemd启动流程
  7. 1.1 嵌入式系统的定义和组成
  8. android音频降噪webrtc
  9. 20190422每周精品之认知
  10. Attempted read from closed stream