首页 文章

是否可以使用numpy来替换这个for循环?

提问于
浏览
0

我正在尝试加速一个评估解决方案适应性的函数,想法是在数组中应用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

个人是一个ids [1,5,3,4,6,7]的数组,每个都列在城市列表,城市列表,这个列表包括城市的坐标,例如 . [1,34,55],[2,44,78],... [7,99,23] . 主要思想是计算TSP问题的距离 .

谢谢你们

1 回答

  • 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
    

相关问题