Как найти расстояния от массива - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть массив дат (1000 столбцов, 2 стрелки).

Ссылка данных: https://mega.nz/#! MMlhWbbT! Bwsu4_t98hLNX-A7IYnWipPydtWILkKxgMzXhu3ytHE

I хочу рассчитать расстояния (не повторяя и не считая дважды). Я использую,

def D(x1,x2,y1,y2):
    return math.sqrt((x2-x1)**2+(y2-y1)**2)  

x1=dt1[0][0]
x2=dt1[1][0]
y1=dt1[0][1]
y2=dt1[1][1]
print(D(x1,x2,y1,y2))

Но есть 1000 точек, как я могу определить расстояние, используя для или что-то подобное?

Ответы [ 2 ]

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

Вы можете использовать np.linalg.norm для вычисления евклидова расстояния:

In [1]: import numpy as np

In [2]: dt1 = np.random.rand(2, 2)

In [3]: dt1
Out[3]:
array([[0.79791459, 0.71415415],
       [0.52647092, 0.894041  ]])

In [4]: np.linalg.norm(dt1[0] - dt1[1])
Out[4]: 0.3256392880558975
0 голосов
/ 12 февраля 2020

Это вычислит расстояние между двумя последовательными точками по всему массиву:

for x in range(0,len(dt1)):
    print(D(dt1[x][0],dt1[x+1][0],dt1[x][1],dt1[x+1][1]))

Если вы хотите вычислить расстояние между любыми двумя точками в массиве без повторений, это должно сделать это (включая новый запрос от ОП):

distances = []
for x in range(0,len(dt1)):
    for y in range(x+1,len(dt1)):
        dist = D(dt1[x][0],dt1[y][0],dt1[x][1],dt1[y][1])
        distances.append(dist)
print(distances)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...