是否可以使用numpy替换此for循环?

时间:2018-09-07 23:05:55

标签: python numpy

我正在尝试加速一个评估解决方案适用性的函数,其思想是在数组中应用for循环,是否可以使用np.sum来做到这一点?

def calculate_fitness2(individual):
    fitness=0
    for i in range(0,len(individual)-1):
        fitness=fitness+sp.spatial.distance.euclidean(city_list[individual][i][1:],city_list[individual][i+1][1:])

    return fitness

individual是一个id ex。[1,5,3,4,6,7]的数组,每个id都表示在城市列表(城市列表)中,该列表包括城市的坐标ex。 [[1,34,55],[2,44,78],...,[7,99,23]]。主要思想是计算TSP问题上的距离。

谢谢大家

1 个答案:

答案 0 :(得分:1)

假设您想要根据individual列表到城市之间的总行驶距离,一种书写方式是:

city_list = np.array([[0, 0], [1, 0], [1, 1], [0, 1]])

path_idx = [0, 1, 2, 3]  # i.e. individual

polyline = city_list[path_idx]  # the list of visited coordinates
                                # a (n x dim) array

distance = np.sum(np.sqrt(np.sum(np.diff(polyline, axis=0)**2, axis=1)))

distance # 3.0