Python的简单图形功能。

pgraph-python的Python项目详细描述


PGraph:Python的简单图

pypi downloadsPyPI version fury.ioLanguage grade: PythonPyPI pyversionsMaintenanceGitHub licenseQUT Centre for Robotics Open Source

这个Python包允许对有向图和无向图进行操作。还支持嵌入式图形。它适用于具有数千个节点的图。在

road network

from pgraph import *
import json

# load places and routes
with open('places.json', 'r') as f:
    places = json.loads(f.read())
with open('routes.json', 'r') as f:
    routes = json.loads(f.read())

# build the graph
g = UGraph()

for name, info in places.items():
    g.add_vertex(name=name, coord=info["utm"])

for route in routes:
    g.add_edge(route[0], route[1], cost=route[2])

# plan a path from Hughenden to Brisbane
p = g.path_Astar('Hughenden', 'Brisbane')
g.plot(block=False) # plot it
g.highlight_path(p)  # overlay the path

图的性质与方法

图分别属于无向图或有向图的UGraph或{}类。图本质上是顶点的容器。在

  • g.add_vertex()添加顶点

  • g.n顶点数

  • g是顶点上的迭代器,可用作for vertex in g:

  • g[i]通过顶点的索引或名称引用顶点


  • g.add_edge()连接两个顶点

  • g.edges()图中的所有边

  • g.plot()绘制顶点和边

  • g.nc图组件的数目,如果完全连接,则为1

  • g.component(v)顶点v所属的组件


  • g.path_BFS()广度优先搜索

  • g.path_Astar()A*搜索


  • g.adjacency()邻接矩阵

  • g.Laplacian()拉普拉斯矩阵

  • g.incidence()关联矩阵

顶点

的性质和方法

顶点属于UVertex(对于无向图)或{}(对于有向图),它们是Vertex的每个子类。在

  • v.coord嵌入式图形的坐标向量(可选)
  • v.name顶点的名称(可选)
  • v.neighbours()是相邻顶点的列表
  • v1.samecomponent(v2)属于同一组件的顶点的谓词

顶点可以按名称命名和引用。在

的性质和方法

边是类Edge的实例。 图对象不引用边,每个边引用一对顶点,而顶点引用边。对于有向图,只有边的起始点引用边对象,而对于无向图,两个顶点都引用边对象。在

  • e.cost规划方法的边缘成本
  • e.next(v)边上的顶点e不是v
  • e.v1e.v2定义边的两个顶点e

修改图形

  • g.remove(v)删除顶点v
  • e.remove()移除边缘e

pgraph类的子类

考虑一个用户类Foo,我们想用一个图overlay来连接它。 Foo的实例成为图中的顶点。在

  • 根据图形类型,让它成为DVertexUVertex的子类
  • 然后使用add_vertexFoo的实例放入图中,并根据需要创建边
^{pr2}$

引擎盖下面

关键对象及其交互作用如下所示。在

data structures

MATLAB版本

这是PGraph.m的重新设计版本,它作为Spatial Math Toolbox for MATLAB的一部分提供。该类用于支持束调整、位姿图SLAM和各种规划器,如PRM、RRT和Lattice。在

Python版本从一开始就设计用来处理有向图和无向图,而有向图是对MATLAB版本的后期添加。语义相似,但不完全相同。尤其是使用子类化而不是引用 user data是受鼓励的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何使用SPARQL从三元组中提取rdf:about或rdf:ID属性?   java如何组合/分离多个json   java如何使用Jackson序列化对象的嵌套集合   Java ProcessBuilder如何从进程捕获文件读取请求并作为流提供?   Java更改JLabel文本更改JLabel位置   如何从Java评估自己的Groovy脚本?   json java下载,然后将图像作为servlet响应写入   java处理多播放器线程和重新绘制   java Selenium如何选择具有可变文本的元素   java动态设置类路径   用字符串Java中的全名替换所有特殊字符的最佳方法是什么?   返回空值的java HashMap   针对空请求体的java Spring bean验证   java API中的“字段摘要”是什么?   jenkins在管道作业中使用多个java版本   java用JAR打开文本文件而不提取帮助   java将JPanel对象添加到单独的JPanel中