Python的简单图形功能。
pgraph-python的Python项目详细描述
PGraph:Python的简单图
- GitHub存储库:https://github.com/petercorke/pgraph-python
- 文档:https://petercorke.github.io/pgraph-python
- 依赖项:
numpy
这个Python包允许对有向图和无向图进行操作。还支持嵌入式图形。它适用于具有数千个节点的图。在
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.v1
,e.v2
定义边的两个顶点e
修改图形
g.remove(v)
删除顶点v
e.remove()
移除边缘e
pgraph类的子类
考虑一个用户类Foo
,我们想用一个图overlay来连接它。
Foo
的实例成为图中的顶点。在
- 根据图形类型,让它成为
DVertex
或UVertex
的子类 - 然后使用
add_vertex
将Foo
的实例放入图中,并根据需要创建边
引擎盖下面
关键对象及其交互作用如下所示。在
MATLAB版本
这是PGraph.m的重新设计版本,它作为Spatial Math Toolbox for MATLAB的一部分提供。该类用于支持束调整、位姿图SLAM和各种规划器,如PRM、RRT和Lattice。在
Python版本从一开始就设计用来处理有向图和无向图,而有向图是对MATLAB版本的后期添加。语义相似,但不完全相同。尤其是使用子类化而不是引用 user data是受鼓励的。在
- 项目
标签: