【问题标题】:Adding nodes and edges to graph data structure dynamically in Matlab在 Matlab 中动态添加节点和边到图形数据结构
【发布时间】: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


【解决方案1】:

您是否尝试过研究 MATLAB 的新式 graph 类?它是在 R2015b 中引入的,具有可用于有效执行这些步骤的方法。具体来说,它有addnodeaddedgermedge等。您还可以使用adjacencygraph对象中提取邻接矩阵。

http://www.mathworks.com/help/matlab/graph-and-network-algorithms.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    相关资源
    最近更新 更多