Евклидово расстояние с весами

В настоящее время я использую 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

5
задан Maggie 14 January 2012 в 07:38
поделиться

1 ответ

Если Вы хотите продолжать использовать функцию 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())
1
ответ дан 13 December 2019 в 21:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: