Как взять одно значение из одного списка и применить его ко всем значениям в другом списке - PullRequest
1 голос
/ 05 мая 2019

По некоторым причинам я не могу выяснить, почему код не работает.Я хочу рассчитать расстояние между каждым значением в списке и всеми другими значениями.как, скажем, я беру первый индекс из моего списка вниз rar [1] = (2927, 6312) Я хочу знать его расстояние до себя (равное 0) и всех других значений в списках.

Вот почему я хочу сделать цикл, в котором первая точка не меняется, пока второй цикл со второй точкой не закончится действием.в конце я хочу получить список, в котором есть подсписки, содержащие расстояния для каждого значения до другого.как это:

расстояние = [[0,1,2,3,4], [0,1,2,3,4], [0,1,2,3,4], [0, 1,2,3,4]]

, где 0 - расстояние между самой точкой и самой точкой.1 - это расстояние между первой точкой и первым значением в списке. 2 - это расстояние между первой точкой и вторым значением в списке ....

Заранее большое спасибо.

rar= [(2925, 6597), (2927, 6312), (2934, 6545), (2938, 7412), (2941, 6456)]

templist=[]
distance=[]
for i in range(len(rar)) :
    firstpoint = rar[i]
    for q in range(len(rar):
       secpoint = rar[q]
       zipz = np.array(list(zip(firstpoint,secpoint)))
       nan = round(np.linalg.norm(zipz))
       templist.append(nan)
    distance.append(templist)

1 Ответ

1 голос
/ 05 мая 2019

Не очень понятно, как вы вычисляете расстояние между двумя элементами, но я предполагаю, что норма разницы должна это делать.Вот небольшой пример того, как это сделать, сохраняя при этом код простым и минимальным, используя выражения списка:

import numpy as np

rar      = [(2925, 6597), (2927, 6312), (2934, 6545), (2938, 7412), (2941, 6456)]
distance = [[round(np.linalg.norm(np.array(a)-np.array(b))) for b in rar] for a in rar]
print(distance)

Вывод:

[[0.0, 285.0, 53.0, 815.0, 142.0],
 [285.0, 0.0, 233.0, 1100.0, 145.0],
 [53.0, 233.0, 0.0, 867.0, 89.0],
 [815.0, 1100.0, 867.0, 0.0, 956.0],
 [142.0, 145.0, 89.0, 956.0, 0.0]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...