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

时间:2017-08-02 20:50:48

标签: python arrays numpy networkx itertools

这是我所拥有的函数的简化版本:

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)

两种情况都太慢了。我理解这可能是由于我的阵列的大小,但我确信有更快/更有效/更好的方法来做到这一点。

0 个答案:

没有答案