我必須定義一個網絡,每個邊的權重必須等於每對節點之間的連接數。下面的代碼生成這樣的網絡:在networkx中,如何以矢量化的方式更新邊緣權重?
In [1]: import networkx as nx
In [2]: g = nx.Graph()
In [3]: connections = [[1,2],[2,3],[1,2],[2,1],[1,4],[2,3]]
In [4]: for e1,e2 in connections :
if g.has_edge(e1,e2) :
g[e1][e2]['weight'] += 1
else :
g.add_edge(e1,e2,weight=1)
...:
In [5]: g.edges(data=True)
Out[5]: [(1, 2, {'weight': 3}), (1, 4, {'weight': 1}), (2, 3, {'weight': 2})]
在實際情況中,連接列表將包含數千對。成千上萬個這樣的列表將被生成,並且它們中的每一個都必須立即包含在網絡中並被刪除,因爲沒有內存可以將所有列表存儲在一起。
由於Python是一種解釋型語言,我不能使用「for」命令,因爲它需要永遠運行。也許「向量化」不是正確的工作,我的意思是類似於我們對numpy數組所做的事情,其中有對一次操作所有元素的命令,而不是使用命令「for」在每個元素中操作。
您不能這樣做,因爲網絡圖必須更新並且無法從多個線程或進程訪問而沒有鎖 – Kikohs