Как мне выполнить цикл и найти расстояние Хаусдорфа для каждой пары?

#python

#python

Вопрос:

учитывая, что

 u = np.array([(1.0, 0.0),
              (0.0, 1.0),
              (-1.0, 0.0),
              (0.0, -1.0)])
v = np.array([(2.0, 0.0),
              (0.0, 2.0),
              (-2.0, 0.0),
              (0.0, -4.0)])
  

Как мне найти расстояние Хаусдорфа для каждой пары, чтобы получить результат. Например

 directed_hausdorff(u[i], v[i])[0]  #where i is the array point
  
  1. 1
  2. 1
  3. 1
  4. 3

Для начала я попробовал без цикла

 HD = directed_hausdorff(u[0],v[0])
print(HD)

--> which should be giving me a result of 1 as i'm taking the 1st array in u amp; v
--> however i am getting the error 'tuple index out of range'
  

Комментарии:

1. что вы пробовали до сих пор?

2. Для каждой точки в u найдите расстояние до точки шкафа в v. Возьмите максимальное из этих расстояний. Вам нужно написать свой собственный код.

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

4. Я просто процитировал определение расстояния Хаусдорфа. Для каждого u найдите расстояние до каждого из v и возьмите минимальное. Теперь возьмите максимум из этих минимумов.

5. Вопрос в том, как найти разницу между двумя точками? Расстояние между <x1, y1> и <x2, y2> равно sqrt((x1 — x2)**2 (y1 — y2)**2). Теорема Пифагора.

Ответ №1:

Я думаю, это то, что вы ищете

 import numpy as np
from scipy.spatial.distance import directed_hausdorff

u = np.array([(1.0, 0.0),
              (0.0, 1.0),
              (-1.0, 0.0),
              (0.0, -1.0)])
v = np.array([(2.0, 0.0),
              (0.0, 2.0),
              (-2.0, 0.0),
              (0.0, -4.0)])
for i in u:
  for j in v:
    print(directed_hausdorff(np.array([i]),np.array([j])))
  print('n')
  

Редактировать……
Для одинаковых индексов

 for i,j in zip(u,v):
  print(directed_hausdorff(np.array([i]),np.array([j])))
  

Комментарии:

1. Да! это то, что я ищу. Есть ли какие-либо способы получить только пару расстояний для u (1.0, 0.0) amp; v (2.0, 0.0), … , u (0.0, -1.0) amp; v (0.0, 4.0)? Поскольку приведенный выше код повторяет u[0] против всех v

2. Если вы найдете это полезным, пожалуйста, проголосуйте и примите ответ. 🙂

3. Он выполняется для всех точек в u и v. проверьте количество операторов печати (его 4 * 4 = 16)

4. ДА. ответ полезен. Но есть ли какие-либо способы, чтобы он выполнялся только для точек, которые находятся в одном и том же индексе массива? например, u[0] против v[0], u [1] против v[1]? Поскольку мне не требуется расстояние для u [0] против v [1] и так далее

5. быстрый вопрос, как мне на самом деле сохранить результат? я попытался добавить, однако записывается только последнее значение.