问题:
余弦相似性是内积空间的两个矢量之间的相似性的度量,其测量它们之间的角度的余弦。 0° 的余弦为 1,对于任何其他角度,余弦小于 1。
Wiki 链接: Cosine Similarity
这里给出公式:
给你两个相同大小的向量 A B,求出他们的余弦相似度。
返回 2.0000
如果余弦相似不合法 (比如 A = [0] B = [0])。
样例:
样例 1:
输入:A = [1,4,0], B = [1,2,3] 输出:0.5834
样例 2:
输入:A = [1], B = [2] 输出:1.0000
python:
class Solution:
"""
@param: A: An integer array
@param: B: An integer array
@return: Cosine similarity
"""
def cosineSimilarity(self, A, B):
# write your code here
if len(A) < 1:
return 2.0
maxLen = len(A)
dotAB = 0.0
sumA = 0.0
sumB = 0.0
for i in range(maxLen):
dotAB += A[i]*B[i]
sumA += A[i]**2
sumB += B[i]**2
if sumA*sumB == 0:
return 2.0
result = dotAB/((sumA*sumB)**0.5)
return result
C++:
class Solution {
public:
/*
* @param A: An integer array
* @param B: An integer array
* @return: Cosine similarity
*/
double cosineSimilarity(vector<int> &A, vector<int> &B) {
// write your code here
if(A.size() < 1)
{
return 2.0;
}
int maxLen = A.size();
double dotAB = 0.0;
double sumA = 0.0;
double sumB = 0.0;
for(int i = 0; i < maxLen; i++)
{
dotAB += A[i] * B[i];
sumA += pow(A[i], 2);
sumB += pow(B[i], 2);
}
if(sumA*sumB == 0)
{
return 2.0;
}
double result = dotAB/(sqrt(sumA*sumB));
return result;
}
};