Скажите, что у меня есть регулярный граф сетки 2d G
, сделанный из NxN=100x100
узлов. Я создаю такую сеть по телефону:Согласованное удаление узлов из grid_2d_graph
N=100
G=nx.grid_2d_graph(N,N)
pos = dict((n, n) for n in G.nodes()) #Dictionary of all positions
labels = dict(((i, j), i + (N-1-j) * N) for i, j in G.nodes())
nx.draw_networkx(G, pos=pos, labels=labels,with_labels=False, node_size=10)
и я получаю результат, аналогичный тому, который показан в левой части этой картины:
Теперь, говорят, что моя сеть испытывает разрушительное событие, которое приводит к сбою нескольких узлов (правая часть изображения). Мой график G
больше не состоит из того же числа узлов: граф G2
теперь имеет K<NxN
узлов. Учитывая этот случай, я хочу, чтобы иметь возможность рисовать G2
по телефону:
G2=G.remove_nodes_from(failed_nodes_dict) #Failed_node_dict holds the disrupted nodes
nx.draw_networkx(G2, pos=pos, labels=labels,with_labels=False, node_size=10)
Мой вопрос. Как это сделать, чтобы убедиться, что словарь позиций pos
не изменен? Это означает: если узел 0
находится в положении (0,0)
(вверху слева) в ситуации 1) и он не терпит неудачу, то он должен появиться в том же положении, в ситуации 2). Таким образом, две сети могут быть сопоставимы, поскольку вторая - это просто «преобразование» первого. Спасибо!
Спасибо @ Джоэл. Просто чтобы убедиться, что у меня всегда есть мой ссылочный граф, как я могу убедиться, что новый графический чертеж не является измененным 'G', а что-то вроде измененной копии' G'? Возможно, я захочу сослаться на исходный 'G' на более поздних этапах. – FaCoffee
Посмотрите на 'G.copy()'. Если вы еще не знаете, как правило, будьте осторожны с копированием вещей в python. Иногда вы просто даете тому же объекту новое имя, поэтому изменение объекта по имени влияет на оба: 'a = [1]', 'b = a',' b.append (2) 'делает' a 'становиться' [1,2] '. В этом случае я считаю, что 'G.copy' будет делать то, что вы хотите, но могут быть проблемы, если, например, у края есть список связанных с ним значений, и вы редактируете некоторые из этих значений. Он может изменить этот атрибут для обоих графиков. Вы хотите прочитать больше об этом. – Joel
После того, как я изменил строку на 'nx.draw_networkx (G, pos = pos, labels = labels, with_labels = False, node_size = 10)', она выдает ошибку: 'AttributeError: объект NoneType 'не имеет атрибутов' node ' '. Не могу понять, о чем идет речь. Я попытаюсь выполнить ответ ниже, чтобы узнать, избавлюсь ли я от этого. – FaCoffee