У меня есть 2 массива в 2D, где векторы столбцов являются векторами признаков. Один массив имеет размер F х А, другой из F х B, где А < < В. В качестве примера, для А = 2 и Р = 3 (B может быть любым):Расстояние между массивами numpy, columnwise
arr1 = np.array([[1, 4],
[2, 5],
[3, 6]])
arr2 = np.array([[1, 4, 7, 10, ..],
[2, 5, 8, 11, ..],
[3, 6, 9, 12, ..]])
Я хочу для вычисления расстояния между arr1
и фрагментом arr2
, который имеет одинаковый размер (в данном случае 3x2) для каждого возможного фрагмента arr2
. Векторы столбцов независимы друг от друга, поэтому я считаю, что я должен рассчитать расстояние между каждым столбчатым вектором в arr1
и коллекцию векторов столбцов от i
до i + A
от arr2
и взять сумму этих расстояний (не уверен, хотя).
Предлагает ли numpy эффективный способ сделать это, или мне нужно взять срезы из второго массива и, используя другой цикл, рассчитать расстояние между каждым столбцом в arr1
и соответствующим вектором столбца в срезе?
Пример для наглядности, используя массивы, указанные выше:
>>> 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...
Конечно, перенося массивы это тоже хорошо, если это означает, что cdist каким-то образом может быть использован здесь.
Интересный вопрос, +1. Могу ли я спросить, какова связь между двумя наборами функций? Если нет общего решения, может быть найдено решение, специфичное для домена. –
Элементы в массивах указывают на наличие (или подсчет, если потребуется) пространственных объектов в изображении. Я пытаюсь найти ближайшее совпадение, поэтому, я думаю, это можно рассматривать как задачу классификации. 'arr1' - это короткая последовательность, в данном случае, 2 временных меток, которая сравнивается с документом B timesteps, чтобы найти индекс ближайшей совпадающей последовательности в нем. –