我必须定义一个网络,每个边的权重必须等于每对节点之间的连接数。下面的代码生成这样的网络:在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