目录:

图的过滤

  • 图视图

    -- 组合图视图

名词解释:

filter:过滤

mask:屏蔽

inverted parameter:倒参数

overhead:开销

minimum spanning tree:最小生成树

betweenness centrality:

GraphView:一个类

regular graphs:正则图

图的过滤

graph-tool的一个很好的特性就是“动态”地过滤边或顶点。

过滤是指暂时地屏蔽顶点/边,实际上并不是真正地删除,可以很容易地恢复。

需要被过滤的顶点或边应该被标记一个bool值类型的属性映射,然后设置set_vertex_filter()set_edge_filter()方法。

默认情况下,值为“1”的顶点或边被保存在图中,那些值为“0”的将被过滤掉。

这种行为可以被修改,通过使用相应函数的倒参数。

所有操作功能和算法将表现为边或顶点已经从图中删除了,以最小的开销。

注意:

重要的是要强调,过滤图时,过滤功能并不会增加任何的额外开销。

在这种情况下,算法的运行速度与不存在过滤功能时一样。

这是一个例子,通过使用函数min_spanning_tree()和边的过滤得到图的最小生成树。

  1. g, pos = triangulation(random((500, 2)) * 4, type="delaunay")
  2. tree = min_spanning_tree(g)
  3. graph_draw(g, pos=pos, edge_color=tree, output="min_tree.pdf")

树的属性映射有一个bool类型,如果边属于树则值为“1”,否则为“0”。

下面是一个被标记了边的原始图的图片。



现在我们可以过滤掉的不属于最小生成树的边。

  1. g.set_edge_filter(tree)
  2. graph_draw(g, pos=pos, output="min_tree_filtered.pdf")

过滤后,图就会如下:



过滤图中的一切都应该透明地工作,只是简单的屏蔽的边被移除。

例如,下面的代码将计算边和顶点的betweenness中心,并在图中画出它们的颜色和线的厚度。

  1. bv, be = betweenness(g)
  2. be.a /= be.a.max() / 5
  3. graph_draw(g, pos=pos, vertex_fill_color=bv, edge_pen_width=be,
  4. output="filtered-bt.pdf")



可以恢复原始图,通过将边的过滤器设置为None。

  1. g.set_edge_filter(None)
  2. bv, be = betweenness(g)
  3. be.a /= be.a.max() / 5
  4. graph_draw(g, pos=pos, vertex_fill_color=bv, edge_pen_width=be,
  5. output="nonfiltered-bt.pdf")



顶点过滤也以类似的方式工作。

此外,图也可以使用set_reversed()方法将边反转。

这也是一个算法复杂度为O(1)的操作,因为这并不真正地修改图。

如前所述,图的directedness也可以被“动态”地改变通过set_directed()方法。

图视图

通常需要同时使用过滤和未过滤的图,或者临时创建一个过滤版本的图来处理一些特定的任务。

为这些目的,graph-tool提供了GraphView类,代表了一个图的过滤“视图”(filtered “view”),表现为一个独立的图对象,与原始图共享底层数据。

Graph Views的构造是通过实例化一个GraphView类,并传递一个支持过滤的图对象,连同所需的过滤参数。

例如,要创建一个图g的有向视图,我们应该:

  1. >>> ug = GraphView(g, directed=True)
  2. >>> ug.is_directed()
  3. True

Graph views还提供更加直接和方便的方法来进行顶点/边缘的过滤:

构建一个过滤的最小生成树就像在上面的例子中,可以通过传递过滤器属性作为“efilter”的参数:

  1. >>> tv = GraphView(g, efilt=tree)

请注意,这是一个O(1)的操作,因为它与直接设置图g的过滤器是等价的(在速度上),但在这种情况下,对象g仍保持未修改状态。

如上图,结果应该是孤立的最小生成树:

  1. >>> bv, be = betweenness(tv)
  2. >>> be.a /= be.a.max() / 5
  3. >>> graph_draw(tv, pos=pos, vertex_fill_color=bv,
  4. ... edge_pen_width=be, output="mst-view.pdf")
  5. <...>



图:Delaunay图的一个视图,孤立的最小生成树。

注意

GraphView对象表现得和正常的图形对象完全一样。

事实上,GraphView是Graph的一个子类。

唯一的区别在于,一个GraphView对象内部数据与父 Graph类共享内在的数据。

因此,如果原始图对象被修改,这种修改会立即反映在GraphView对象上,反之亦然。

更方便地,我们提供一个函数作为过滤器的参数,以顶点或边为单一参数,如果顶点/边应该保持则返回True,否则,返回False。

例如,如果我们只想保留最“中央”的边,我们可以:

  1. >>> bv, be = betweenness(g)
  2. >>> u = GraphView(g, efilt=lambda e: be[e] > be.a.max() / 2)

这创建了一个图视图u,其只包含g的边,which have a normalized betweenness centrality larger than half of the maximum value。

注意,不同于上面的例子,这是一个(O(E))的操作,(E)是边的数量,因为提供的函数必须被调用(E)次来构造一个过滤器的属性映射。

因此,提供一个构造过滤器图总是更快,但是提供一个函数可以更方便。

上面构造的图视图可以被可视化

  1. >>> be.a /= be.a.max() / 5
  2. >>> graph_draw(u, pos=pos, vertex_fill_color=bv, output="central-edges-view.pdf")
  3. <...>



图:Delaunay图的一个视图,孤立规范化的中间性中心大于0.01的边。

组合图视图

因为图视图是正则图,可以很轻松地创建图视图的图视图。

这提供了一个组合过滤器的方便的方式。

例如,为了隔离上面的例子中最小生成树的所有度大于四的顶点我们可以:

  1. >>> u = GraphView(g, vfilt=lambda v: v.out_degree() > 4)
  2. >>> tree = min_spanning_tree(u)
  3. >>> u = GraphView(u, efilt=tree)

由此产生的图视图可以被可视化为

  1. >>> graph_draw(u, pos=pos, output="composed-filter.pdf")
  2. <...>



图:组合视图,获取图中最小生成树中度大于4的所有顶点。

原文链接:Quick start using graph-tool

graph-tool文档(一)- 快速开始使用Graph-tool - 3.图的过滤的更多相关文章

  1. [Swift通天遁地]七、数据与安全-(2)对XML和HTML文档的快速解析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. 空间日志编辑器:word文档图文快速粘贴到web

    百度ueditor可以实现word文档图文快速粘贴到web 1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前 ...

  3. apidoc接口文档的快速生成

    官方文档连接:http://apidocjs.com/#demo apidoc是一个轻量级的在线REST接口文档生成系统,支持多种主流语言,包括Java.C.C#.PHP和Javascript等.使用 ...

  4. 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理

    服务器文档下载zip格式   刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...

  5. 淘宝(阿里百川)手机客户端开发日记第十篇 阿里百川服务器环境介绍之API文档的快速链接(四)

    个人感觉比较重要的快速链接: http://open.taobao.com/doc/detail.htm?id=102513 http://open.taobao.com/doc/detail.htm ...

  6. 转: seajs手册与文档之 -- 快速参考 ( ~~useful )

    目录 快速参考 seajs.use seajs.config define require require.async exports module.exports 快速参考 该页面列举了 SeaJS ...

  7. NoSQL四种——kv存储(memcache,Riak),列存储(Cassandra,Hbase),文档类(mongoDB,CouchDB),图数据库(neo4j)

    见:https://software.intel.com/sites/default/files/Configuration_and_Deployment_Guide_for_Cassandra_on ...

  8. 快速创建vuepress项目(使用vuepress写文档)

    vuepress的官方文档:https://vuepress.vuejs.org/zh/guide/ 参考:https://segmentfault.com/a/1190000016333850 ht ...

  9. .Net魔法堂:提取注释生成API文档

    一.前言 在多人协作的项目中,除了良好的代码规范外,完整的API文档也相当重要.通过文档我们快速了解系统各模块的实际接口,及其使用场景.使用示例,一定程度上降低沟通成本,和减少后期维护中知识遗失等风险 ...

  10. mango-1.4.1 文档

    文档目录 快速开始 添加依赖包 数据库准备 创建HelloWorld类 书写插入与查询方法 构造数据源并初始化mango对象 获取dao并调用插入与查询方法 查看完整示例代码和表结构 基本操作 准备工 ...

随机推荐

  1. Windows2003中IIS配置MVC提示HTTP错误 404-文件或目录未找到

    Windows2003中IIS提示HTTP错误 404-文件或目录未找到 一.开启服务 启动服务“ASP.NET 状态服务”(ASP.NET State Service ),设置成“自动”. 设置完成 ...

  2. Educational Codeforces Round 16 A

    Description he only king stands on the standard chess board. You are given his position in format &q ...

  3. 2016年6月24日 星期五 --出埃及记 Exodus 14:21

    2016年6月24日 星期五 --出埃及记 Exodus 14:21 Then Moses stretched out his hand over the sea, and all that nigh ...

  4. 腾讯微博模拟登陆+数据抓取(java实现)

    不多说,贴出相关代码. 参数实体: package token.def; import java.io.Serializable; import java.util.Properties; publi ...

  5. null&this&super&向上转型

    向上转型:父类声明子类实例化对象 例如A是父类 B是子类    1 : 实际上是父类的对象但将会丢失子类没有的父类方法 ,如果调用方法 将会调用子类重写的父类方法    2:上转型对象不能调用子类新增 ...

  6. 【leetcode❤python】 58. Length of Last Word

    #-*- coding: UTF-8 -*-#利用strip函数去掉字符串去除空格(其实是去除两边[左边和右边]空格)#利用split分离字符串成列表class Solution(object):   ...

  7. BZOJ 1835 基站选址(线段树优化DP)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1835 题意:有N个村庄坐落在一条直线上,第 i(i>1)个村庄距离第1个村庄的距离 ...

  8. SSMS Tools Pack

    http://www.ssmstoolspack.com/Features Format SQL 大小写切换,只切换关键字 http://www.ssmstoolspack.com/Features? ...

  9. Linux系统下如何配置SSH?如何开启SSH

    查询\安装SSH服务 1.登陆linux系统,打开终端命令.输入 rpm -qa |grep ssh 查找当前系统是否已经安装 2.如果没有安装SSH软件包,可以通过yum  或rpm安装包进行安装( ...

  10. NPO与X7R、X5R、Y5V、Z5U神马的有啥区别

    主要是介质材料不同.不同介质种类由于它的主要极化类型不一样,其对电场变化的响应速度和极化率亦不一样. 在相同的体积下的容量就不同,随之带来的电容器的介质损耗.容量稳定性等也就不同.介质材料划按容量的温 ...