2013-02-25 4 views
0

Я использовал read_graphml для загрузки графика, и он выглядит так, как если бы он возвращал объект массива Multiedges, который я не могу запустить метод PageRank (возвращает исключение, которое граф должен быть нестрочным). Есть ли способ конвертировать мой график в не-multiedged типа (я не думаю, что у меня есть несколько ребер в загруженном графике ...).Как преобразовать граф multiedges в ни один направленный граф в Networkx?

Благодаря

ответ

2

Если функция read_graphml() возвращала мультиграф() объекта он, вероятно, нашли параллельный (мультипликатор) ребер в входном файле. Но вы можете преобразовать это в график без параллельных ребер, просто перейдя в новый Graph(). например

In [1]: import networkx as nx 

In [2]: G = nx.MultiGraph([(1,2),(1,2)]) 

In [3]: G.edges() 
Out[3]: [(1, 2), (1, 2)] 

In [4]: H = nx.Graph(G) 

In [5]: H.edges() 
Out[5]: [(1, 2)] 
+0

Этот метод не работал для меня. После импорта в «g» я получил экземпляр «DiGraph». Я попробовал «nx.MultiGraph (g)», и полученный граф имел ровно половину ребер. Я бы хотел, чтобы это было такое же количество ребер, но для тех, кто не был направлен. Есть ли способ достичь этого? –

+0

Если вы получаете экземпляр DiGraph() для g, вы можете напрямую вызвать pagerank (g)? Если вместо этого вы получите MultiDiGraph() для g, вы можете вызвать DiGraph (g), чтобы вернуть график без параллельных ребер. – Aric

+0

что я хочу - это график с двумя неориентированными ребрами между каждой парой узлов. возможно ли это с любым типом диаграммы networkx? –