如何在Python中为向量添加幅度或值?

时间:2019-04-25 07:37:09

标签: numpy linear-algebra word2vec

我正在使用此函数计算大小为300,word2vec的2个向量a,b之间的距离,我得出'hot'和'cold'之间的距离等于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 个答案:

答案 0 :(得分:2)

您应该查看norm是什么。如果是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是a中的第i个元素)。由于(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向量,更常用的距离度量也可能是相关的:cosine distance,用于测量两个向量之间的角度。