我試圖用的igraph到用Python語言編寫的代碼添加邊緣,無效的頂點ID,當我嘗試添加使用while循環邊這一錯誤想出了不能在IGRAPH
while(i<k)
g.add_vertices(theInts[i])
i=i+1
g.add_edges([(theInts[i-1],theInts[i])])
我認爲索引可能是一個問題,所以我還包括一個if語句,但這似乎不成問題。
請幫忙!!!
我試圖用的igraph到用Python語言編寫的代碼添加邊緣,無效的頂點ID,當我嘗試添加使用while循環邊這一錯誤想出了不能在IGRAPH
while(i<k)
g.add_vertices(theInts[i])
i=i+1
g.add_edges([(theInts[i-1],theInts[i])])
我認爲索引可能是一個問題,所以我還包括一個if語句,但這似乎不成問題。
請幫忙!!!
我認爲這一切都取決於g
對頂點的影響。如果從空的g
開始,則只有頂點0
,因此如果您嘗試使用兩個不同的頂點調用add_edges
,則它不起作用。你必須添加更多的頂點。當然,這一切都取決於你的圖形在循環之前的樣子,以及i
是什麼。
您可以使用print
顯示有關圖表的一些簡要信息。例如,
>>> import igraph
>>> graph = igraph.Graph()
>>> print graph
Undirected graph (|V| = 1, |E| = 0)
如果i
從0開始,那麼你就不會跟你的循環第一次就添加任何頂點。所以當你嘗試添加邊時,你試圖添加到不存在的頂點。
>>> graph.add_vertices(0)
<igraph.Graph object at 0xcea850>
>>> print graph
Undirected graph (|V| = 1, |E| = 0)
>>> graph.add_edges([(0, 1)])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
igraph.core.InternalError: Error at type_indexededgelist.c:245: cannot add edges, Invalid vertex id
如果這不是問題,請嘗試打印邊緣並查看它們是否與您想要的相符。
>>> graph.add_vertices(5)
<igraph.Graph object at 0xcea850>
>>> print graph
Undirected graph (|V| = 6, |E| = 3)
>>> graph.add_edges([(1, 1), (2, 3), (3, 5)])
<igraph.Graph object at 0xcea850>
>>> graph.get_edgelist()
[(1, 1), (2, 3), (3, 5)]
此外,有完整的TraceBack可能會更有幫助。
編輯:基於您的評論
所以你說你有一個這樣的結構:
>>> graph = igraph.Graph()
>>> print graph
Undirected graph (|V| = 1, |E| = 0)
你想補充一點,頂點2?我不確定你可以用igraph做到這一點。它似乎必須有順序的每個頂點。您可以檢查是否有頂點,然後在必要時添加它們,記住這些圖是基於0的。像這樣的東西。
>>> vertices = 1, 2, 13, 4, 21, 5
>>> map_graph = igraph.Graph()
>>> print map_graph
Undirected graph (|V| = 1, |E| = 0)
>>> map_graph.add_vertices(max(vertices))
<igraph.Graph object at 0xceaa50>
>>> print map_graph
Undirected graph (|V| = 22, |E| = 0)
>>> map(map_graph.add_edges, zip(vertices, vertices[1:]))
[<igraph.Graph object at 0xceaa50>, <igraph.Graph object at 0xceaa50>, <igraph.Graph object at 0xceaa50>, <igraph.Graph object at 0xceaa50>, <igraph.Graph object at 0xceaa50>]
>>> print map_graph
Undirected graph (|V| = 22, |E| = 5)
>>> map_graph.get_edgelist()
[(1, 2), (2, 13), (4, 13), (4, 21), (5, 21)]
或者如果你不喜歡地圖,你可以循環它。
>>> vertices = 1, 2, 13, 4, 21, 5
>>> loop_graph = igraph.Graph()
>>> print loop_graph
Undirected graph (|V| = 1, |E| = 0)
>>> loop_graph.add_vertices(max(vertices))
<igraph.Graph object at 0xcea950>
>>> print loop_graph
Undirected graph (|V| = 22, |E| = 0)
>>> for pair in zip(vertices, vertices[1:]):
... loop_graph.add_edges(pair)
...
<igraph.Graph object at 0xcea950>
<igraph.Graph object at 0xcea950>
<igraph.Graph object at 0xcea950>
<igraph.Graph object at 0xcea950>
<igraph.Graph object at 0xcea950>
>>> print loop_graph
Undirected graph (|V| = 22, |E| = 5)
>>> loop_graph.get_edgelist()
[(1, 2), (2, 13), (4, 13), (4, 21), (5, 21)]
雖然可能有更好的方法。如果這不是你想要的,請更詳細地編輯你的原始問題,以及一些實際的代碼。
實際上我在做g.add_vertices(vertice [i]),它不會給我正確的結果,因爲當vertice [i] = 2時它的值增加了2個頂點,但我想要的是添加名稱2的頂點請幫助這個! – Fyre 2012-04-07 18:44:34
@Fyre,我不確定我的編輯是否回答你的問題。也許你可以在你原來的問題中提供更多的細節,如果它不。 – confab 2012-04-07 21:00:05
非常感謝您的回覆。但是我實際上在說什麼,可以添加一個名爲21的頂點?在這種情況下,當您添加21時,它將21添加到以前的頂點數量,但我想要做的是將21作爲頂點並將頂點總數設置爲2. – Fyre 2012-04-08 02:08:30
進入循環之前'i'和'k'的值是多少? – Mahesh 2012-04-07 14:23:43