求向量的余弦相似度和欧氏距离

部分示意代码,仅作Demo使用,未作严格的参数检查等。


公式:cos(q,d) = q·/ (|q||d|)

代码示例:

def guiyi(x):
    fenmu = sqrt(sum(pow(xi, 2) for xi in x))
    return [xi/fenmu for xi in x]

def cos(a, b):
    return sum(ai*bi for ai,bi in zip(a, b))

上述代码适用于多维向量需要两两之间求相似度的情景。下面的代码将直接求得两个向量的余弦相似度。

def sim(a, b):
    return sum(ai * bi for ai, bi in zip(a, b)) / (sqrt(sum(ai ** 2 for ai in a)) * sqrt(sum(bi ** 2 for bi in b)))

公式:|xy|=√Σ(xiyi)2

代码示例:

def euc(a, b):
    return sqrt(sum((ai - bi) ** 2 for ai, bi in zip(a, b)))

附:
求向量内积的代码。

def s(a, b):
    return sum(ai * bi for ai, bi in zip(a, b))

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据