已知两个128维向量,向量格式为list,计算两个向量的余弦相似性

计算两个向量的余弦相似度可以使用以下公式:

余弦相似度 = (向量A · 向量B) / (||向量A|| * ||向量B||)

其中,向量A · 向量B 表示向量A和向量B的点积(内积),||向量A|| 和 ||向量B|| 表示向量A和向量B的欧几里德范数(模)。

下面是一个示例代码,展示如何计算两个128维向量的余弦相似度:

import numpy as np

# 假设你有两个128维向量
vector_a = [0.1, 0.2, ..., 0.5]  # 替换为实际的向量数值
vector_b = [0.3, 0.5, ..., 0.7]  # 替换为实际的向量数值

# 将向量转换为NumPy数组
array_a = np.array(vector_a)
array_b = np.array(vector_b)

# 计算余弦相似度
dot_product = np.dot(array_a, array_b)
norm_a = np.linalg.norm(array_a)
norm_b = np.linalg.norm(array_b)
cosine_similarity = dot_product / (norm_a * norm_b)

print("余弦相似度:", cosine_similarity)

在这个示例中,我们首先将向量转换为NumPy数组,然后使用NumPy提供的函数计算点积和欧几里德范数,最后计算余弦相似度。请确保将 vector_a 和 vector_b 替换为实际的128维向量数据。

如果向量b中包含多个向量,怎么计算a和b中多个向量的相似性:

import numpy as np

# 向量A,128维
vector_a = np.array([1.0, 2.0, ...])  # 替换...为实际的向量元素

# 包含多个向量的列表,转为NumPy数组
vectors_b = np.array([
    [3.0, 4.0, ...],  # 替换...为实际的向量元素
    [5.0, 6.0, ...],  # 替换...为实际的向量元素
    [7.0, 8.0, ...],  # 替换...为实际的向量元素
    [9.0, 10.0, ...]  # 替换...为实际的向量元素
])

# 计算向量A的范数
norm_a = np.linalg.norm(vector_a)

# 计算余弦相似性
dot_products = np.dot(vectors_b, vector_a)
norms_b = np.linalg.norm(vectors_b, axis=1)
cosine_similarities = dot_products / (norm_a * norms_b)

# 打印余弦相似性
print("余弦相似性数组:", cosine_similarities)

 如果a,b中都包含多个向量:

import numpy as np

# 包含多个子向量的列表,转为NumPy数组
vectors_a = np.array([
    [1.0, 2.0, ...],  # 替换...为实际的向量元素
    [3.0, 4.0, ...],  # 替换...为实际的向量元素
    # 添加更多子向量
])

# 包含多个向量的列表,转为NumPy数组
vectors_b = np.array([
    [5.0, 6.0, ...],  # 替换...为实际的向量元素
    [7.0, 8.0, ...],  # 替换...为实际的向量元素
    [9.0, 10.0, ...]  # 替换...为实际的向量元素
    # 添加更多向量
])

# 计算向量A中每个子向量与向量B中每个向量的余弦相似性
# 使用NumPy的广播来执行计算,无需显式循环
dot_products = np.dot(vectors_a, vectors_b.T)
norms_a = np.linalg.norm(vectors_a, axis=1)
norms_b = np.linalg.norm(vectors_b, axis=1)

# 计算余弦相似性矩阵
cosine_similarities = dot_products / np.outer(norms_a, norms_b)

# 打印余弦相似性矩阵
print("余弦相似性矩阵:")
print(cosine_similarities)

 

posted @ 2023-09-13 09:03  海_纳百川  阅读(68)  评论(0编辑  收藏  举报
本站总访问量