【发布时间】:2016-09-02 04:37:41
【问题描述】:
我通常在matlab中创建图形如下:
g=sparse(5,5);
g(2,3)=1;
等等。
如果我预先创建了图形并以形象的方式提供给我,这样我就必须制作一个表示该图形的邻接矩阵,这将非常有效。但现在我有一个不同的问题。我必须从头开始动态创建图表。我有一堆节点,比如 500 个节点。现在我必须遍历这 500 个节点,如果满足某些条件,我将在我的图形结构中放置一些节点,比如 200。然后我将在这个 200 个节点池中的不同节点对上运行一个循环,如果满足某些条件,那么我将添加一条边。
我在 Matlab 中工作,我能想到的一种方法是我将初始化一个大小为 500x500 的邻接矩阵。只需为通过标准的边缘添加边缘。这是不可取的。我根本不想在我的图形结构中包含 500 个点。
基本上,我想在 Matlab 中执行此操作。在研究论文的伪代码中,它被告知:
Add vertex v0 to graph G.
我该如何实现?
然后一个伪代码告诉
Add edge (v0,v1) to graph G.
最后,如果图中 (v0,v1) 中已经存在一条边,并且您被告知:
Delete edge (v0,v1) % Not asking you to delete the nodes.
Add node v.
Add edges (v0,v) and (v,v1)
我想高效地完成这些步骤。我希望能够动态地创建我的图表。我不想创建一个巨大的邻接矩阵,然后在其中指定边。如果需要,我想逐步构建我的图表。如果这可以在 Matlab 中完成,请告诉我。否则我也对python持开放态度。
【问题讨论】:
-
对于python,有networkx。 Matlab 还应该有一些支持高效更新的图形库。但最有效的内部数据结构始终取决于您的使用统计信息。 (我会坚持使用一些已经存在的库,除非我有很好的理由不这样做;以有效的方式在稀疏矩阵上手动执行此操作并不简单;一些稀疏数据结构不喜欢稀疏模式的变化)
标签: python algorithm matlab graph