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
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 计算两个向量相似度的方法有以下几种: 1. 欧几里得距离(Euclidean distance) 2. 曼哈顿距离(Manhattan distance) 3. 余弦相似度(Cosine similarity) 4. Jaccard相似系数(Jaccard similarity coefficient) 以余弦相似度为例,用 Python 实现代码如下: ```python import numpy as np def cosine_similarity(v1, v2): cosine = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) return cosine v1 = np.array([1, 2, 3]) v2 = np.array([1, 1, 1]) print(cosine_similarity(v1, v2)) ``` 欧几里得距离、曼哈顿距离和Jaccard相似系数的代码实现方法类似。 ### 回答2: 计算两个向量相似度的方法有多种,下面列举其中两种常用方法:余弦相似度和欧氏距离。 1. 余弦相似度(Cosine Similarity):表示两个向量之间夹角的余弦值,取值范围为[-1, 1]。当余弦相似度接近1时,表示两个向量的方向接近;当余弦相似度接近-1时,表示两个向量的方向相反;当余弦相似度接近0时,表示两个向量夹角接近90度,方向无关。 计算公式如下: \[ \text{similarity} = \frac{{\sum_{i=1}^n (A_i \cdot B_i)}}{{\sqrt{\sum_{i=1}^n A_i^2} \cdot \sqrt{\sum_{i=1}^n B_i^2}}} \] 其中,$A_i$和$B_i$分别表示向量A和向量B的第$i$个元素。 以Python代码实现如下: ```python import numpy as np def cosine_similarity(vector1, vector2): dot_product = np.dot(vector1, vector2) norm1 = np.linalg.norm(vector1) norm2 = np.linalg.norm(vector2) similarity = dot_product / (norm1 * norm2) return similarity # 示例 vector1 = np.array([1, 2, 3]) vector2 = np.array([4, 5, 6]) similarity = cosine_similarity(vector1, vector2) print("Cosine similarity:", similarity) ``` 2. 欧氏距离(Euclidean Distance):表示两个向量之间的距离,距离越小表示两个向量越相似。计算公式如下: \[ \text{distance} = \sqrt{\sum_{i=1}^n (A_i - B_i)^2} \] 以Python代码实现如下: ```python import numpy as np def euclidean_distance(vector1, vector2): distance = np.sqrt(np.sum((vector1 - vector2) ** 2)) return distance # 示例 vector1 = np.array([1, 2, 3]) vector2 = np.array([4, 5, 6]) distance = euclidean_distance(vector1, vector2) print("Euclidean distance:", distance) ``` 以上是关于计算两个向量相似度的余弦相似度和欧氏距离的方法以及对应的Python代码实现。 ### 回答3: 计算两个向量相似度有多种方法,以下列举其中三种常用的方法:余弦相似度、欧氏距离和曼哈顿距离。 1. 余弦相似度(Cosine Similarity) 余弦相似度常用于衡量两个向量方向的相似程度,取值范围在[-1, 1]之间。其计算公式为: cosine_similarity = dot(a, b) / (norm(a) * norm(b)) 2. 欧氏距离(Euclidean Distance) 欧氏距离常用于衡量两个向量之间的直线距离,取值范围为非负实数。其计算公式为: euclidean_distance = sqrt(sum((a - b)^2)) 3. 曼哈顿距离(Manhattan Distance) 曼哈顿距离常用于衡量两个向量之间的差异程度,取值范围为非负实数。其计算公式为: manhattan_distance = sum(abs(a - b)) 下面是用Python实现以上三种方法的代码示例: import numpy as np from numpy.linalg import norm # 余弦相似度 def cosine_similarity(a, b): dot_product = np.dot(a, b) norm_product = norm(a) * norm(b) return dot_product / norm_product # 欧氏距离 def euclidean_distance(a, b): return np.sqrt(np.sum((a - b) ** 2)) # 曼哈顿距离 def manhattan_distance(a, b): return np.sum(np.abs(a - b)) # 示例数据 vector1 = np.array([1, 2, 3]) vector2 = np.array([4, 5, 6]) print("余弦相似度:", cosine_similarity(vector1, vector2)) print("欧氏距离:", euclidean_distance(vector1, vector2)) print("曼哈顿距离:", manhattan_distance(vector1, vector2)) 以上代码使用numpy库进行数组运算和计算范数,输出了示例数据的余弦相似度、欧氏距离和曼哈顿距离。可以根据实际需要修改输入向量、添加更多的判断等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值