Tengo 2 matrices en 2D, donde los vectores de columna son vectores de características. Una matriz es de tamaño F x A, el otro de F x B, donde A < < B. Como un ejemplo, para A = 2 y F = 3 (B puede ser cualquier cosa):Distancia entre matrices numpy, columna
arr1 = np.array([[1, 4],
[2, 5],
[3, 6]])
arr2 = np.array([[1, 4, 7, 10, ..],
[2, 5, 8, 11, ..],
[3, 6, 9, 12, ..]])
Quiero para calcular la distancia entre arr1
y un fragmento de arr2
que es del mismo tamaño (en este caso, 3x2), para cada posible fragmento de arr2
. Los vectores de columna son independientes entre sí, por lo que creo que debería calcular la distancia entre cada vector de columna en arr1
y una colección de vectores de columna que van desde i
hasta i + A
desde arr2
y tomar la suma de estas distancias (aunque no estoy seguro).
¿Numpy ofrece una forma eficiente de hacerlo, o tendré que tomar rodajas de la segunda matriz y, utilizando otro bucle, calcular la distancia entre cada vector de columna en arr1
y el vector de columna correspondiente en la división?
Ejemplo para mayor claridad, utilizando las matrices mencionadas anteriormente:
>>> magical_distance_func(arr1, arr2[:,:2])
[0, 10.3923..]
>>> # First, distance between arr2[:,:2] and arr1, which equals 0.
>>> # Second, distance between arr2[:,1:3] and arr1, which equals
>>> diff = arr1 - np.array([[4,7],[5,8],[6,9]])
>>> diff
[[-3, -3], [-3, -3], [-3, -3]]
>>> # this happens to consist only of -3's. Norm of each column vector is:
>>> norm1 = np.linalg.norm([:,0])
>>> norm2 = np.linalg.norm([:,1])
>>> # would be extremely good if this worked for an arbitrary number of norms
>>> totaldist = norm1 + norm2
>>> totaldist
10.3923...
Por supuesto, la transposición de las matrices está muy bien también, si eso significa que cdist alguna manera se puede utilizar aquí.
Interesante pregunta, +1. ¿Puedo preguntar cuál es la relación entre los dos conjuntos de características? Si no hay una solución general, tal vez se encuentre una solución específica de dominio. –
Los elementos en las matrices indican la presencia (o conteos, si se quiere) de características espaciales en una imagen. Estoy tratando de encontrar la coincidencia más cercana, así que supongo que se puede ver como una tarea de clasificación. 'arr1' es una secuencia corta de, en este caso, 2 pasos de tiempo, que se compara con un documento de B timesteps para encontrar el índice de la secuencia de coincidencia más cercana en él. –