directed_hausdorff#
- scipy.spatial.distance.directed_hausdorff(u, v, rng=0, *, seed=None)[источник]#
Вычислить направленное расстояние Хаусдорфа между двумя двумерными массивами.
Расстояния между парами вычисляются с использованием евклидовой метрики.
- Параметры:
- u(M,N) array_like
Входной массив с M точками в N измерениях.
- v(O,N) array_like
Входной массив с O точками в N измерениях.
- rngint или
numpy.random.Generatorили None, опционально Состояние генератора псевдослучайных чисел. По умолчанию 0, поэтому перемешивание u и v воспроизводим.
Если rng передается по ключевому слову, типы, отличные от
numpy.random.Generatorпередаются вnumpy.random.default_rngдля создания экземпляраGenerator. Если rng уже являетсяGeneratorэкземпляра, то предоставленный экземпляр используется.Если этот аргумент передаётся по позиции или seed передается по ключевому слову, устаревшее поведение для аргумента seed применяется:
Если seed равно None, новый
RandomStateиспользуется экземпляр. Состояние инициализируется с использованием данных из/dev/urandom(или Windows-аналог) если доступно, или из системных часов в противном случае.Если seed является int, новый
RandomStateиспользуется экземпляр, инициализированный с seed.Если seed уже является
GeneratorилиRandomStateэкземпляр, то используется этот экземпляр.
Изменено в версии 1.15.0: В рамках SPEC-007 переход от использования
numpy.random.RandomStatetonumpy.random.Generator, этот ключевое слово было изменено с seed to rng. В переходный период оба ключевых слова будут продолжать работать, хотя только одно может быть указано за раз. После переходного периода вызовы функций с использованием seed ключевое слово будет выдавать предупреждения. Поведение обоих seed и rng описаны выше, но только rng ключевое слово должно использоваться в новом коде.
- Возвращает:
- ddouble
Направленное расстояние Хаусдорфа между массивами u и v,
- index_1int
индекс точки, вносящей вклад в пару Хаусдорфа в u
- index_2int
индекс точки, вносящей вклад в пару Хаусдорфа в v
- Вызывает:
- ValueError
Исключение выбрасывается, если u и v не имеют одинакового количества столбцов.
Смотрите также
scipy.spatial.procrustesЕщё один тест на схожесть для двух наборов данных
Примечания
Использует технику раннего прерывания и подход случайной выборки, описанный [1]. Хотя наихудшая производительность
O(m * o)(как в алгоритме полного перебора), это маловероятно на практике, так как входные данные должны требовать от алгоритма исследования каждого отдельного взаимодействия точек, и после того, как алгоритм перемешивает входные точки в этот момент. Наилучшая производительность — O(m), что достигается выбором расстояния внутреннего цикла, меньшего, чем cmax, и приводящего к раннему прерыванию как можно чаще. Авторы формально показали, что среднее время выполнения ближе к O(m).Добавлено в версии 0.19.0.
Ссылки
[1]А. А. Таха и А. Ханбери, «Эффективный алгоритм вычисления точного расстояния Хаусдорфа». IEEE Transactions On Pattern Analysis And Machine Intelligence, т. 37 стр. 2153-63, 2015.
Примеры
Найти направленное расстояние Хаусдорфа между двумя двумерными массивами координат:
>>> from scipy.spatial.distance import directed_hausdorff >>> import numpy as np >>> 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, v)[0] 2.23606797749979 >>> directed_hausdorff(v, u)[0] 3.0
Нахождение общего (симметричного) расстояния Хаусдорфа между двумя 2-D массивами координат:
>>> max(directed_hausdorff(u, v)[0], directed_hausdorff(v, u)[0]) 3.0
Найти индексы точек, которые генерируют расстояние Хаусдорфа (пара Хаусдорфа):
>>> directed_hausdorff(v, u)[1:] (3, 3)