如何给 Python 中的向量添加幅度或值?
How to add magnitude or value to a vector in Python?
我正在使用此函数计算大小为 300 的 word2vec 的 2 个向量 a、b 之间的距离,我得到 'hot' 和 'cold' 之间的距离等于 1。
如何将这个值 (1) 添加到向量中,因为我只是想 new_vec=model['hot']+1,但是当我计算 dist(new_vec,模型['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!
您应该查看 norm 是什么。对于 numpy,默认使用 L-2 范数(a.k.a 欧几里得范数)。当你给一个向量加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
回答问题,"How to add a value to a vector":你做对了。如果您想向特定元素添加一个值,那么您可以执行 vec2[ix] += value
,其中 ix
索引您希望添加的元素。如果要在向量中的所有元素中统一添加一个值,这将使范数改变 1,则添加 np.sqrt(1/300)
.
也可能相关的是 word2vec 向量更常用的距离度量:cosine distance 测量两个向量之间的角度。
我正在使用此函数计算大小为 300 的 word2vec 的 2 个向量 a、b 之间的距离,我得到 'hot' 和 'cold' 之间的距离等于 1。
如何将这个值 (1) 添加到向量中,因为我只是想 new_vec=model['hot']+1,但是当我计算 dist(new_vec,模型['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!
您应该查看 norm 是什么。对于 numpy,默认使用 L-2 范数(a.k.a 欧几里得范数)。当你给一个向量加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
回答问题,"How to add a value to a vector":你做对了。如果您想向特定元素添加一个值,那么您可以执行 vec2[ix] += value
,其中 ix
索引您希望添加的元素。如果要在向量中的所有元素中统一添加一个值,这将使范数改变 1,则添加 np.sqrt(1/300)
.
也可能相关的是 word2vec 向量更常用的距离度量:cosine distance 测量两个向量之间的角度。