Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 如何在Python中为向量添加大小或值?_Numpy_Linear Algebra_Word2vec - Fatal编程技术网

Numpy 如何在Python中为向量添加大小或值?

Numpy 如何在Python中为向量添加大小或值?,numpy,linear-algebra,word2vec,Numpy,Linear Algebra,Word2vec,我用这个函数来计算两个向量a,b之间的距离,大小为300,word2vec,我得到“热”和“冷”之间的距离等于1 如何将这个值(1)加到一个向量上,因为我只想到new_vec=model['hot']+1,但是当我计算距离时(new_vec,model['hot'])=17 我希望dist(a,c)会给我1 你应该回顾一下是什么。在numpy的情况下,默认使用L-2范数(也称为欧几里德范数)。将1添加到向量时,调用是将1添加到向量中的所有元素 >> vec1 = np.random.

我用这个函数来计算两个向量a,b之间的距离,大小为300,word2vec,我得到“热”和“冷”之间的距离等于1

如何将这个值(1)加到一个向量上,因为我只想到new_vec=model['hot']+1,但是当我计算距离时(new_vec,model['hot'])=17


我希望dist(a,c)会给我1

你应该回顾一下是什么。在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
where
ix
为要添加的元素编制索引。如果要在向量中的所有元素上均匀地添加一个值,该值将使范数改变1,则添加
np.sqrt(1/300)


另一个可能相关的是word2vec向量更常用的距离度量:它测量两个向量之间的角度。

您应该查看它是什么。在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
where
ix
为要添加的元素编制索引。如果要在向量中的所有元素上均匀地添加一个值,该值将使范数改变1,则添加
np.sqrt(1/300)


另一个可能相关的是word2vec向量更常用的距离度量:它测量两个向量之间的角度。

如果我可以进一步询问,感谢您的详细解释,因为您提到了余弦sim,所以如果cos sim('cold','hot')=0.7,我如何将这个大小添加到向量中?正如在new_vec=model['hot']+(0.7)中一样,在这个领域,“将这个量级添加到一个向量”是不常见的,因此它可能有助于了解您为什么要这样做。(如果你想让向量“指向同一个方向,但更强烈”,更典型的做法是将向量乘以某个因子。但由于词向量到词向量的比较通常是通过余弦相似性来完成的,顾名思义,余弦相似性不受向量大小的影响,这同样是一种非典型操作。)谢谢你的详细解释,如果我可以进一步问的话,因为你提到了cosine_-sim,那么如果cos_-sim('cold','hot')=0.7,我如何将这个量级加到向量上?正如在new_vec=model['hot']+(0.7)中一样,在这个领域,“将这个量级添加到一个向量”是不常见的,因此它可能有助于了解您为什么要这样做。(如果你想让向量“指向同一个方向,但更强烈”,更典型的做法是将向量乘以某个因子。但由于词向量到词向量的比较通常是通过余弦相似性来完成的,顾名思义,余弦相似性不受向量大小的影响,这同样是一种非典型操作。)