这是我所拥有的函数的简化版本:
def create_edge(a,b,network=G):
weight = calculate_weight(matrix[a],matrix[b])
network.addedge(array[a],array[b], weight = weight)
基本上它需要两个矩阵行索引,计算两行之间的权重,然后将其作为两个节点之间边缘的权重。
我的目标是在数组中的每对组合上执行此功能。我的意思是,如果我有一个这样的数组:
array = np.array(['A','B','C','D'])
预先形成这些功能:
create_edge('A','B')
create_edge('A','C')
create_edge('A','D')
create_edge('B','C')
create_edge('B','D')
create_edge('C','D')
抓住的是我的阵列很大!它包含大约15000个元素。这意味着它非常慢。我想知道是否有快速的方法来做到这一点?
到目前为止我尝试过:
阻止XYproblem。我可能应该注意,我不一定需要它成对配对,因为B-> A和A-> B是相同的,我只是收集它后会这样做更快:
def create_network(network):
for i in range(len(array)):
for j in range(len(array)):
create_edge(i,j,network)
我也试过这个:
comb = list(itertools.combinations(array,2))
def create_network(network):
for i in range(len(comb)):
create_edge(comb[i][0],comb[i][1], network)
两种情况都太慢了。我理解这可能是由于我的阵列的大小,但我确信有更快/更有效/更好的方法来做到这一点。