python计算几种常用的向量相似度

记录一下常用的三种向量相似度计算代码,包括欧式距离、余弦距离、KL散度。

class DistanceCalculate(object):

    def __init__(self, vector1, vector2):
        self.vector1 = vector1
        self.vector2 = vector2
        if len(self.vector1) != len(self.vector2):
            print(self.vector1, len(self.vector1), '\n', self.vector2, len(self.vector2))
            print("Error: vector length is not equal.")
            exit()
        elif len(self.vector1) == len(self.vector2) and len(self.vector1) == 0:
            print("Error: vector length is zero.")
            exit()
        else:
            pass

    def euclidean_distance(self):
        d = np.sqrt(np.sum(pow(np.array(self.vector1)-np.array(self.vector2), 2)))
        return d

    def cosine_distance(self):
        inner_product = np.dot(np.array(self.vector1), np.array(self.vector2))
        d = inner_product / ((np.sqrt(np.sum(pow(np.array(self.vector1), 2))))*(np.sqrt(np.sum(pow(np.array(self.vector2), 2)))))
        return inner_product, d

    def kullback_leibler_divergence(self):
        vector1, vector2 = np.array(self.vector1), np.array(self.vector2)
        vector12 = np.array(self.vector1 + self.vector2)
        norm_vector1 = (vector1 - np.min(vector12)) / (np.max(vector12) - np.min(vector12))
        norm_vector2 = (vector2 - np.min(vector12)) / (np.max(vector12) - np.min(vector12))
        div = np.sum(norm_vector1 * (np.log2((norm_vector1 + 1e-7) / (norm_vector2 + 1e-7))))
        return div
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值