在数组中的所有元素对组合上执行函数的快速方法

2024-03-28 16:09:19 发布

您现在位置:Python中文网/ 问答频道 /正文

以下是我拥有的一个函数的简化版本:

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)

两个案子都太慢了。我知道这可能是由于我的数组的大小,但我相信有一个更快/更有效/更好的方法来做到这一点。你知道吗


Tags: 函数inforlendefcreaterangenetwork