У меня есть эти данные, которые выглядят следующим образом.
[column 1] [column 2] [column 3] [column 4] [column 5]
[row 1] (some value)
[row 2]
[row 3]
...
[row 700 000]
и второй набор данных, который выглядит точно так же, но с меньшим количеством строк около 4. Что я хотел бы сделать, этовычислите евклидово расстояние между каждыми данными в наборе данных 1 и 2 и найдите минимальное значение 4, как показано здесь:
Это затем повторяется для остальных700000 rows
данных.Я знаю, что не рекомендуется перебирать массивы numpy
, следовательно, есть ли способ рассчитать минимальное расстояние 4 различных строк от набора данных 2, подаваемого в 1 строку набора данных 1?
Извиняюсь, если это сбивает с толку, но мои главные моменты в том, что я не хочу перебирать массив и пытаюсь найти лучший способ решения этой проблемы.
ВВ конце я должен получить обратно 700 000 строк на 1 столбец с лучшим (самым низким) значением из 4 зеленых полей набора данных 2.
import numpy as np
a = np.array([ [1,1,1,1] , [2,2,2,2] , [3,3,3,3] ])
b = np.array( [ [1,1,1,1] ] )
def euc_distance(array1, array2):
return np.power(np.sum((array1 - array2)**2, axis = 1) , 0.5)
print(euc_distance(a,b))
# this prints out [0 2 4]
Однако, когда я попытался ввести больше, чем1 измерение,
a = np.array([ [1,1,1,1] , [2,2,2,2] , [3,3,3,3] ])
b = np.array( [ [1,1,1,1] , [2,2,2,2] ] )
def euc_distance(array1, array2):
return np.power(np.sum((array1 - array2)**2, axis = 1) , 0.5)
print(euc_distance(a,b))
# this throws back an error as the dimensions are not the same
Я ищу способ превратить его в своего рода трехмерный массив, где я получаю массив [[euc_dist([1,1,1,1],[1,1,1,1]), euc_dist([1,1,1,1],[2,2,2,2])] , ... ]