Рассчитать расстояние между двумя векторами разной длины - PullRequest
13 голосов
/ 16 февраля 2012

Существуют разные методы для вычисления расстояния между двумя векторами одинаковой длины: евклидов, Манхэттен, Хэмминг ...

Меня интересует любой метод, который бы вычислял расстояние между векторами разной длины.

Ответы [ 4 ]

9 голосов
/ 16 февраля 2012

Евклидова формула расстояния находит расстояние между любыми двумя точками в евклидовом пространстве.

Точка в евклидовом пространстве также называется евклидовым вектором.

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

Для векторов разных размеров применяется тот же принцип.

Предположим, что вектор более низкой размерности также существует в пространстве более высокой размерности.Затем вы можете установить все недостающие компоненты в нижнем мерном векторе на 0, чтобы оба вектора имели одинаковое измерение.Затем вы будете использовать любую из упомянутых формул расстояния для вычисления расстояния.

Например, рассмотрим двумерный вектор A в с компонентами (a1,a2) и трехмерный вектор B в с компонентами (b1,b2,b3).

Чтобы выразить A в , вы должны установить его компоненты равными (a1,a2,0).Тогда евклидово расстояние d между A и B можно найти по формуле:

d² = (b1 - a1)² + (b2 - a2)² + (b3 - 0)²

d = sqrt((b1 - a1)² + (b2 - a2)² + b3²)

Для вашего конкретного случая компоненты будут либо 0, либо 1,поэтому все различия будут -1, 0 или 1.Тогда разница в квадрате будет 0 или 1.

Если вы используете целые числа или отдельные биты для представления компонентов, вы можете использовать простые побитовые операции вместо некоторой арифметики (^ означает XOR или exclusive or):

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) ^ a(n-1) + b(n) ^ a(n))

И мы предполагаем, что конечные компоненты A равны 0, поэтому окончательная формула будет:

d = sqrt(b1 ^ a1 + b2 ^ a2 + ... + b(n-1) + b(n))
2 голосов
/ 29 января 2018

Вы не можете напрямую рассчитать расстояния между векторами различной длины.

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

Есть много-много функций (на самом деле бесконечно много), которые можно использовать:

  • Заполните нулями. Это проще всего сделать. Скажем, если у вас есть машина и вам нужно рассчитать расстояние до самолета, это ставит машину на уровень моря.
  • Найдите где-нибудь пропущенные значения. На примере автомобиля с самолетом вы запустите свою базу геоданных и посмотрите высоту по долготе / широте.
  • Используйте некоторую математическую функцию.

Поскольку результат вычисления расстояния сильно зависит от функции, которая преобразует более короткий вектор в более длинный, всем необходимо четко понимать, какая функция используется. Либо потому, что все в полях согласны с тем, что имеет смысл только одна функция, либо потому, что функция, использованная в преобразовании, записана вниз.

0 голосов
/ 08 февраля 2018

Идея заполнения массива короткого размера нулями такой же длины, как у массива большого размера, не кажется "в общем" правильной идеей.

Например, если у нас есть два набора (массивы, векторы, ...) измерений для одного и того же параметра (например, температуры, скорости или двоичного параметра в качестве состояния двухпозиционного переключателя), выполненного в разные моменты времени , Предположим, что первый набор A1 состоит из N измерений, выполненных в наборе моментов T1, тогда как второй набор A2 состоит из M измерений (M ~ = N), выполненных в наборе моментов T2.

Обратите внимание, что распределение T2 произвольно отличается от распределения T1. Таким образом, заполнение нулями здесь не имеет смысла.

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

A1_new = интерполировать (T1, A1, T);

A2_new = интерполировать (T2, A2, T);

, где interpolate (x, y, xq) принимает входные данные как переменную x, функцию y (x) и точки запроса xq. Функция «интерполировать» возвращает интерполированный выход y (xq).

Теперь мы можем сравнить наборы одинакового размера A1_new и A2_new по любой подходящей мере, например. Евклидово расстояние.

0 голосов
/ 04 сентября 2014

Вы можете попытаться вычислить среднее минимальное расстояние между двумя векторами p и q с размерами n и m (n ~ = m):

d = 1/n * sum_i=1:n ( min_j=1:m (p(i) - q(j))) + 1/m * sum_j=1:m (min_i=1:n (p(i) - q(j)))
...