В настоящее время я использую SciPy
для вычисления евклидова расстояния
dis = scipy.spatial.distance.euclidean(A,B)
где; A, B - 5-мерные битовые векторы. Сейчас все работает нормально, но если я добавлю веса для каждого измерения, можно ли использовать scipy?
Что я имею сейчас: sqrt((a1-b1)^2 + (a2-b2)^2 +...+ (a5-b5)^2)
Что я хочу: sqrt(w1(a1-b1)^2 + w2(a2-b2)^2 +...+ w5(a5-b5)^2)
используя scipy или numpy или любой другой эффективный способ сделать это.
Thanks
Если Вы хотите продолжать использовать функцию scipy, Вы могли бы предварительно обработать вектор как это.
def weighted_euclidean(a, b, w):
A = a*np.sqrt(w)
B = b*np.sqrt(w)
return scipy.spatial.distance.euclidean(A, B)
Однако это - взгляд медленнее, чем
def weightedL2(a, b, w):
q = a-b
return np.sqrt((w*q*q).sum())