Доступ к элементам из списка? - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь вычислить расстояние между двумя списками, чтобы найти кратчайшее расстояние между всеми координатами.

Вот мой код:

import random
import math
import copy

def calculate_distance(starting_x, starting_y, destination_x, destination_y):
    distance = math.hypot(destination_x - starting_x, destination_y - starting_y)  # calculates Euclidean distance (straight-line) distance between two points
    return distance
def nearest_neighbour_algorithm(selected_map):

  temp_map = copy.deepcopy(selected_map)
  optermised_map = [] # we setup an empty optimised list to fill up

  # get last element of temp_map to set as starting point, also removes it from temp_list 
  optermised_map.append(temp_map.pop()) # we set the first element of the temp_map and put it in optimised_map as the starting point and remove this element from the temp_map

  for x in range(len(temp_map)):
    nearest_value = 1000 
    neares_index = 0       
    for i in range(len(temp_map[x])):
      current_value = calculate_distance(*optermised_map[x], *temp_map[x])

Я получаю сообщение об ошибке в этой части, и я не уверен, почему:

    for i in range(len(temp_map[x])):
      current_value = calculate_distance(*optermised_map[x], *temp_map[x])

Я пытаюсь найти расстояние между точки между этими двумя списками и ошибка, которую я получаю, состоит в том, что индекс моего списка находится вне диапазона, где для l oop равно

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Длина списков одинакова? Я могу ошибаться, но это звучит как упражнение на сходство с косинусом. Посмотрите на это очень простое упражнение.

from scipy import spatial

dataSetI = [3, 45, 7, 2]
dataSetII = [2, 54, 13, 15]
result = 1 - spatial.distance.cosine(dataSetI, dataSetII)
result
# 0.97228425171235

dataSetI = [1, 2, 3, 10]
dataSetII = [2, 4, 6, 20]
result = 1 - spatial.distance.cosine(dataSetI, dataSetII)
result
# 1.0

dataSetI = [10, 200, 234, 500]
dataSetII = [45, 3, 19, 20]
result = 1 - spatial.distance.cosine(dataSetI, dataSetII)
result
# 0.4991255575740505

Во второй итерации мы видим, что крысы ios чисел в двух списках абсолютно одинаковы, но числа разные. Мы фокусируемся на крысе ios чисел.

0 голосов
/ 11 апреля 2020

На первой итерации optermised_map будет иметь длину 1. Скорее всего, это приведет к ошибке, потому что она повторяется по len (temp_map), которая, вероятно, больше 1. Я думаю, вы, возможно, хотели:

for i in range(len(optermised_map)):
  current_value = calculate_distance(*optermised_map[i], *temp_map[x])
...