Как указать порядок вершин и порядок ребер при получении матрицы инцидентности орграфа в мудреце? - PullRequest
1 голос
/ 09 марта 2019

Мы можем получить матрицу инцидентности орграфа, используя метод incidence_matrix(oriented=None, sparse=True, vertices=None) в 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).

1 Ответ

1 голос
/ 19 марта 2019

Быстрый просмотр кода (который вы можете получить, выполнив g.edge_iterator??) для edge_iterator() подсказок

Возвращенный итератор по инцидентам по краям с любой вершиной
, заданной впараметр "вершины".

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 27513 .

...