2012-02-16 35 views
13

Existen diferentes métodos para calcular la distancia entre dos vectores de la misma longitud: euclidiano, Manhattan, Hamming ...Calcular la distancia entre dos vectores de diferente longitud

Me pregunto acerca de cualquier método que calcula la distancia entre vectores de diferente longitud.

+0

¿Qué contienen tus vectores? (Bits, flotadores, ...)? ¿No puedes llenarlos con 0 y aplicar una de las distancias de vectores de igual longitud? – Scharron

+0

@Scharron, creo que estás confundiendo la dimensión de un vector con la longitud (norma) de un vector. OP no mencionó en ninguna parte que el número de componentes en un vector difiera del número de componentes en otro vector. – ardnew

+3

@ardnew Tienes razón en las matemáticas puras. Pero por la forma en que se expresa la pregunta, supuse que hablaba sobre la longitud de la "informática", es decir, la cantidad de elementos en un vector. De lo contrario, no tendría problemas para calcular la distancia de los vectores de diferente longitud. – Scharron

Respuesta

6

La fórmula de distancia euclidiana encuentra la distancia entre dos puntos cualesquiera en el espacio euclidiano.

Un punto en el espacio euclidiano también se denomina vector euclidiano.

Puede usar la fórmula de distancia euclidiana para calcular la distancia entre vectores de dos longitudes diferentes.

Para vectores de diferente dimensión, se aplica el mismo principio.

Supongamos que un vector de dimensión inferior también existe en el espacio dimensional superior. A continuación, puede establecer todos los componentes faltantes en el vector dimensional inferior en 0 para que ambos vectores tengan la misma dimensión. Luego, usaría cualquiera de las fórmulas de distancia mencionadas para calcular la distancia.

Por ejemplo, considere un vector de 2 dimensiones A en con componentes (a1,a2), y un vector de 3 dimensiones B en con componentes (b1,b2,b3).

Para expresar A en , debe establecer sus componentes en (a1,a2,0). Entonces, la distancia euclídea d entre A y B se puede encontrar usando la fórmula:

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

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

para su caso particular, los componentes serán o 0 o 1, por lo que todas las diferencias serán -1, 0, o 1. Las diferencias al cuadrado solo serán 0 o 1.

Si estás usando números enteros o trozos individuales para representar los componentes, puede utilizar operaciones bit a bit simples en lugar de un poco de aritmética (^ significa XOR o exclusive or):

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

y estamos suponiendo que el arrastre componentes de A son 0, por lo que la fórmula final serán:

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

Al principio, tiene sentido. Pero ahora, después de pensar un rato, establecer el valor que falta de la dimensión faltante en cero, podría causar problemas, si usa el Euclidiano para calcular la coincidencia de huellas digitales para la ubicación. En tu ejemplo ...imagine que el vector A contiene (0,0) y el vektor B contiene (0,0,0) Y un Vektor C contiene (0,0,0), que el Euclidiano daría como resultado un cálculo de distancia de cero, para ambas distancias . Pero A está mucho más alejado de B que C. – JacksOnF1re

+0

@ JacksOnF1re no estoy seguro de seguir. en su ejemplo, ¿por qué la distancia de A a B debe ser diferente de la distancia de B a C? – ardnew

+0

Mi explicación es un poco pobre. Lo que quiero decir es que si se calcula la distancia con euclidiano, la distancia entre A y B es la misma que B y C. ¡Pero ese es el problema! A a B debería devolver una distancia mayor, debido a la dimensión que falta. Eso puede causar problemas (supongo), si se trata de cálculos para la localización. matemáticamente correcto, pero limitado útil para problemas de programación. Lo siento por mi ingles. – JacksOnF1re

0

se puede tratar de calcular la distancia mínima media entre dos vectores P y q de dimensiones n y 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))) 
0

No se pueden calcular directamente las distancias entre vectores de diferente longitud.

Todas las sugerencias aquí comienzan con una función que asigna el vector de menor longitud a uno de mayor longitud y luego realiza el cálculo de la forma habitual.

Hay muchas, muchas funciones (infinitamente muchos, de hecho) que se pueden utilizar:

  • se llenan con ceros. Es lo más fácil de hacer. Supongamos que si tiene un automóvil y necesita calcular su distancia a un avión, coloca el automóvil al nivel del mar.
  • Busque los valores que faltan en alguna parte. Con el ejemplo de automóvil-avión, iniciaría su base de datos geográfica y buscaría alturas desde la longitud/latitud.
  • Usa alguna función matemática.

Dado que el resultado del cálculo de la distancia depende en gran medida de la función que convierta el vector más corto en el más largo, todos deben tener claro qué función se utiliza. O porque todos en el campo están de acuerdo en que solo una función tiene sentido, o porque la función utilizada en la conversión se anota.

0

La idea de rellenar la matriz de tamaño pequeño con ceros para tener la misma longitud que la matriz de tamaño grande no parece "en general" una idea correcta.

Por ejemplo, si tenemos dos conjuntos (matrices, vectores, ...) de mediciones para el mismo parámetro (por ejemplo, temperatura, velocidad o un parámetro binario como el estado de un interruptor de encendido/apagado) realizados en diferentes momentos instantes. Supongamos que el primer conjunto A1 consiste en N mediciones hechas en un conjunto de instantes T1, mientras que el segundo conjunto A2 consiste en M medidas (M ~ = N) tomadas en un conjunto de instantes T2.

Tenga en cuenta que la distribución de T2 difiere arbitrariamente de la de T1. Por lo tanto, el relleno con ceros aquí no tiene sentido.

En este caso, propongo a utilizar la interpolación mediante el uso de un conjunto común de instantes de tiempo, digamos T como sigue:

A1_new = Interpolar (T1, A1, T);

A2_new = interpolar (T2, A2, T);

donde interpolate (x, y, xq) acepta las entradas como la variable x, la función y (x) y los puntos de consulta xq. La función 'interpolar' devuelve la salida interpolada y (xq).

Ahora, podemos comparar los conjuntos del mismo tamaño A1_new y A2_new con cualquier medida adecuada, p. Distancia euclidiana.

Cuestiones relacionadas