NetworkX тривиально вложенные представления - PullRequest
0 голосов
/ 06 февраля 2020

Из документации networkx.DiGraph.reverse.

DiGraph.reverse(copy=True)[source] Возвращает обратную сторону графика. Реверс - это граф с теми же узлами и ребрами, но с перевернутыми направлениями ребер.

copy (bool optional (default=True)) - если True, вернуть новый DiGraph, удерживая перевернутые края. Если False, обратный график создается с использованием представления исходного графика.

Из сети x представления графиков документация:

Примечание. Поскольку Графические представления выглядят как графы, в результате можно получить цепочки просмотра-просмотра. Будьте осторожны с цепями, потому что они становятся очень медленными примерно с 15 вложенными представлениями.

Вопрос

Если я неоднократно вызываю G.reverse(copy=False) на моем графике, чтобы чередовать исходное и обратное представления вызовет ли это так называемую «вложенную цепочку представлений», хотя представления тривиально цикличны c?

1 Ответ

0 голосов
/ 06 февраля 2020

Это выглядит так:

import networkx as nx
G = nx.directed_configuration_model([1,5]*30, [2,3,4]*20)  #a simple directed graph
H = G.reverse(copy = False)
H
>  <networkx.classes.graphviews.MultiReverseView at 0x10bf61c88>
I = H.reverse(copy = False)
I
>  <networkx.classes.graphviews.MultiReverseView at 0x10bf69a90>

Если вы посмотрите на исходный код, в случае copy = False он вызывает reverse_view, чей код здесь . Он ничего не делает, чтобы проверить, является ли это уже обратным представлением.

Это, вероятно, создало бы проблемы, если бы не было так. Вы можете ожидать, что представление будет вести себя иначе, чем граф, и если оно действительно вернуло граф, код может работать неправильно.

...