如何在获得圣人的有向图的关联矩阵时指定顶点顺序和边缘顺序?

问题描述 投票:1回答:1

我们可以使用incidence_matrix(oriented=None, sparse=True, vertices=None) in SageMath方法获得有向图的关联矩阵。

每行都是一个顶点,每列都是一个边。顶点按照方法vertices()获得的顺序排序,除非给出参数vertices,并且边缘由方法edge_iterator()获得。

我的问题是如何指定顶点顺序和边缘顺序?


例如,g是一个有10条边的加权有向图:

edges = [('s', 'x', 3), ('s', 'y', 5),
         ('x', 'y', 2), ('x', 'z', 6),
         ('y', 'x', 1), ('y', 'z', 4), ('y', 't', 6),
         ('z', 't', 2),
         ('t', 's', 3), ('t', 'z', 7)]

g = DiGraph(edges)

我想安排入射矩阵,使得顶点(从上到下)按s, x, y, z, t排序,边缘按edges排序(从左到右)(即按字母顺序s, x, y, z, t列出边缘)。

sage
1个回答
1
投票

快速浏览g.edge_iterator??的代码(你可以通过edge_iterator()获得)

返回的迭代器遍历任何顶点的边缘 在参数“vertices”中给出。

if oriented:
    for e, (i, j) in enumerate(self.edge_iterator(labels=False)):
        if i != j:
            m[verts[i],e] = -1
            m[verts[j],e] = +1
else:
    for e, (i, j) in enumerate(self.edge_iterator(labels=False)):
        m[verts[i],e] += 1
        m[verts[j],e] += 1

告诉我,可能需要修改代码才能改变顺序。

这似乎是一个合理的要求,可以自定义,所以我为此打开了Sage Trac ticket 27513

© www.soinside.com 2019 - 2024. All rights reserved.