簡體   English   中英

iGraph Python,將邊列表轉換為元組並添加

[英]iGraph Python, convert edge list to tuple and add.edges

我有一個具有50個節點和100條邊的圖G1。 所有邊緣均加權。 我創建了一個邊緣列表(按預定義順序排序,刪除具有大值的特定邊緣),它們的索引如下:

Edgelist: [75, 35, 32, 1, ...]

我想以10為批次將邊添加到不同的圖形G2中(以節省計算時間),但是add.edges似乎想要一個頂點對的元組列表。 所以,

  1. 如何將上面的Edge列表轉換為元組列表,例如[(40,2),(10,1),(10,11),(0,0),...]。 我已經嘗試過使用G1.es [edge] .tuple進行循環,但是iGraph會將[edge]變量作為屬性讀取,而如果您只編寫G1.es [75] .tuple,它就可以正常工作。

  2. 如何從G1查找權重並將其以10為批次添加到G2?

1)圖G1已刪除了不需要的邊。 邊列表是G1的邊順序。

tuple_list=[]
for e in G1.es:
    tuple_list.append(e.tuple)

sorted_tuples=[tuple_list[i] for i in Edgelist]
sorted_weights = [G1.es['weight'][o] for o in Edgelist]

2)添加邊-可以簡單地為G1中的所有邊循環。 下面的示例適用於前10個。

edges_to_add=sorted_tuples[0:10]
weights_to_add=sorted_weights[0:10]

G2.add_edges(edges_to_add)

for edge in range(len(edges_to_add)):
    G2.es[G2.get_eid(edges_to_add[edge][0],edges_to_add[edge][1],0)]['weight'] = weights_to_add[edge]

分別添加邊緣權重,這有點慢,但是似乎沒有辦法在iGraph中成批添加邊緣權重

  1. 您必須注意,用單個數字索引G1.es將返回Edge類型的對象,而使用數字列表對其進行索引將返回EdgeSeq類型的對象。 Edge對象具有一個名為tuple的屬性,而EdgeSeq對象則沒有,因此這就是G1.es[edgelist].tuple不起作用的原因。但是,您可以這樣做:

     sorted_tuples = [edge.tuple for edge in G1.es[edgelist]] 

    您還可以直接從EdgeSeq對象中提取weight屬性的值:

     sorted_weights = G1.es[edgelist]["weight"] 
  2. 在這里,您可以利用以下事實:如果G2具有M條邊,並添加m條額外邊,則這些新邊的ID將在M(含)到M + m(不含)范圍內:

     M = G2.ecount() m = len(sorted_tuples) G2.add_edges(sorted_tuples) G2.es[M:(M+m)] = sorted_weights 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM