Я считаю, что этот атрибут графа на узле указывает подграф, из которого этот узел взят в исходном графе, но я не уверен. Если бы кто-то мог проверить, что это было бы хорошо.
Да, вы правы , полагая, что атрибут graph
фактически указывает подграф на основе исходного графа. Упоминается в документации для фактор-графа. Ознакомьтесь с описанием node_data
, вы обнаружите, что:
node_data (function) – This function takes one argument, B, a set of
nodes in G, and must return a dictionary representing the node data
attributes to set on the node representing B in the quotient graph. If
None, the following node attributes will be set:
- graph, the subgraph of the graph G that this block represents,
- nnodes, the number of nodes in this block,
- nedges, the number of edges within this block,
- density, the density of the subgraph of G that this block represents.
Вы также можете проверить подграф самостоятельно, набрав
for node in B.nodes():
print("Information for subgraph ", node)
print(B.nodes[node]['graph'].nodes())
# Output:
# Information for subgraph frozenset({0, 1})
# Nodes are [0, 1]
# Information for subgraph frozenset({2, 3, 4})
# Nodes are [2, 3, 4]
Теперь я не На самом деле нужен подграф в файле graphml, поэтому просто удаление этих данных, вероятно, лучший способ для меня записать график в файл. Каков наилучший способ сделать это?
Вы можете просто создать новый граф и добавить только узлы и ребра и отбросить любые другие данные. (Опять же, вы правы, полагая, что эта информация не имеет отношения к записи данных в формате GraphML, поскольку вам нужны только узлы и ребра).
Давайте проверим EdgeView факторного графа, прежде чем идти дальше:
B.edges(data=True)
# EdgeDataView([(frozenset({0, 1}), frozenset({2, 3, 4}), {'weight': 6})])
Обратите внимание, что data
для края это словарь с weight
в качестве ключа. Эта информация будет полезен в следующем коде.
Теперь создайте новый граф и добавьте ребра непосредственно из фактор-графа.
H = nx.Graph()
# Here B is the quotient graph
for u,v,d in B.edges(data=True):
# Notice how the weight is assigned to the new graph
H.add_edge(u, v, weight=d['weight'])
Если вы хотите убедиться, что новый граф имеет ту же структуру, вы можете проверить это, используя nx.is_isomorphi c
nx.is_isomorphic(H, B)
# True
Теперь вы можете просто написать свой график в формате GraphML
nx.readwrite.graphml.write_graphml(H, "my_graph.graphml")
Для получения дополнительной информации вы можете этот Google Colab Notebook , с вышеуказанным рабочим кодом.
Ссылки: