优化/重构Python for循环以利用Numpy

时间:2018-04-25 17:07:32

标签: python python-3.x numpy optimization

使用Numpy为Python中的二次分配问题实现局部搜索算法,我发现使用for循环最好是有问题的,因为CPython在繁重的数学计算方面非常慢。

我的代码有一个3级嵌套for循环,它迭代一个解决方案(numpy ndarray),遍历一个掩码(numpy ndarray),再次迭代解决方案,然后进行一些计算,这就是麻烦的一点,可能会影响以后的迭代

我的问题是,是否有可能以某种方式预先计算这个?由于问题的性质,我不太确定。由于问题是二次方,对于小尺寸它是可以接受的,但是超过100个元素导致很多的迭代。

代码如下:

while has_improved and iterations < 100:
    for r in range(n):
        for b in dlb:
            if b: continue

            has_improved = False

            for s in range(n):
                move_cost = cost_fn_delta((flow, distance), solution, r, s)

                if move_cost < 0:
                    # Swap the indices
                    solution[r], solution[s] = solution[s], solution[r]
                    cost += move_cost

                    dlb[r], dlb[s] = False, False

                    has_improved = True

                iterations += 1

            if not has_improved:
                dlb[r] = True

0 个答案:

没有答案