#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
- 1
- 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. быстрый вопрос, как мне на самом деле сохранить результат? я попытался добавить, однако записывается только последнее значение.