目录:

图的过滤

  • 图视图

    -- 组合图视图

名词解释:

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()和边的过滤得到图的最小生成树。

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

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

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



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

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

过滤后,图就会如下:



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

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

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



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

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



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

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

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

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

图视图

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

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

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

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

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

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

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

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

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

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

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



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

注意

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

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

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

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

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

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

>>> bv, be = betweenness(g)
>>> 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)次来构造一个过滤器的属性映射。

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

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

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



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

组合图视图

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

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

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

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

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

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



图:组合视图,获取图中最小生成树中度大于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. Android中直播视频技术探究之---视频直播服务端环境搭建(Nginx+RTMP)

    一.前言 前面介绍了Android中视频直播中的一个重要类ByteBuffer,不了解的同学可以 点击查看 到这里开始,我们开始动手开发了,因为我们后续肯定是需要直播视频功能,然后把视频推流到服务端, ...

  2. 简单的ajax封装

    // ajax发送post请求返回 json 数据function requestJSON(params) {    params.dataType = 'json';    sendPost(par ...

  3. Repeater的Command操作

    Repeater的Command操作 1.ItemCommand事件 :在Repeater中所有能触发事件的控件,都会来触发这一个事件 后台创建:在Page_Load中 Repeater1.ItemC ...

  4. linux 切换多个jdk脚本

    1,编写脚本 jdkswitch.sh #!/bin/sh # usage: . this_file [argvs] openjdk7_home=/usr/lib/jvm/java--openjdk- ...

  5. Xcode性能优化2

    使用Xcode Analyze进行代码静态检查 1,value stored to 'XX' is never read 改成: NSDate *date = [formatter dateFromS ...

  6. 【转载】C++内存分配

    原文:C++内存分配 内存泄露相信对C++程序员来说都不陌生.解决内存泄露的方案多种多样,大部分方案以追踪检测为主,这种方法实现起来容易,使用方便,也比较安全. 首先我们要确定这个模块的主要功能: 能 ...

  7. An Example of Pre-Query and Post-Query Triggers in Oracle Forms With Using Display_Item to Highlight Dynamically

    Example is given for Pre-Query and Post-Query triggers in Oracle Forms, with using Display_Itembuilt ...

  8. Create Stacked Canvas to Scroll Horizontal Tabular Data Blocks In Oracle Forms

    In this tutorial you will learn to create horizontal scrollable tabular or detail data block by usin ...

  9. Django Models的数据类型

    Django中的页面管理后台 Djano中自带admin后台管理模块,可以通过web页面去管理,有点想php-admin,使用步骤: 在项目中models.py 中创建数据库表 class useri ...

  10. [SAP ABAP开发技术总结]OPEN SQL

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...