已知两个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)
本文来自博客园,作者:海_纳百川,转载请注明原文链接:https://www.cnblogs.com/chentiao/p/17630396.html,如有侵权联系删除