Как добавить величину или значение для вектора в Python? - PullRequest
0 голосов
/ 25 апреля 2019

Я использую эту функцию для вычисления расстояния между 2 векторами a, b, размера 300, word2vec, я получаю расстояние между «горячим» и «холодным» равным 1.

Как добавить это значение (1) к вектору, потому что я думал просто new_vec = model ['hot'] + 1, но когда я делаю calc dist (new_vec, model ['hot']) = 17?

import numpy
def dist(a,b):
  return numpy.linalg.norm(a-b)


a=model['hot']
c=a+1
dist(a,c)

17

Я ожидал, что dist (a, c) вернет мне 1!

1 Ответ

2 голосов
/ 25 апреля 2019

Вы должны проверить, что такое норма .В случае numpy по умолчанию используется норма L-2 (она же евклидова норма).Когда вы добавляете 1 к вектору, необходимо добавить 1 ко всем элементам в векторе.

>> vec1 = np.random.normal(0,1,size=300)
>> print(vec1[:5])
... [ 1.18469795  0.04074346 -1.77579852  0.23806222  0.81620881]

>> vec2 = vec1 + 1
>> print(vec2[:5])
... [ 2.18469795  1.04074346 -0.77579852  1.23806222  1.81620881]

Теперь ваш вызов norm говорит sqrt( (a1-b1)**2 + (a2-b2)**2 + ... + (aN-bN)**2 ), где Nдлина вектора, a - первый вектор, b - второй вектор (а ai - i-й элемент в a) .Поскольку (a1-b1)**2 == (a2-b2)**2 == ... == (aN-bN)**2 == 1 мы ожидаем, что эта сумма произведет N, которое в вашем случае равно 300. Поэтому sqrt(300) = 17.3 является ожидаемым ответом.

>> print(np.linalg.norm(vec1-vec2))
... 17.320508075688775

Чтобы ответить на вопрос «Как добавить значение к вектору»: вы сделали это правильно.Если вы хотите добавить значение к определенному элементу, вы можете сделать vec2[ix] += value, где ix индексирует элемент, который вы хотите добавить.Если вы хотите добавить значение равномерно по всем элементам в векторе, которое изменит норму на 1, добавьте np.sqrt(1/300).

Также, возможно, уместно использовать более часто используемую метрику расстояния для векторов word2vec:1023 * косинусное расстояние , которое измеряет угол между двумя векторами.

...