You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在Python中比较两个不同数组时Cosine Similarity始终为1.0?

问题:计算两个数组的余弦相似度结果始终为1.0,不符合预期

我在Python中用以下代码计算两个不同数组的余弦相似度,结果一直是1.0,但预期应该是0到1之间的值,请问问题出在哪里?

代码如下:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
# Define two functions as arrays

numbers1 = np.array([17.5, 114.5, 1.4])
numbers2 = np.array([117.5, 194.5, 1113.4])

function1 = np.sort(np.array([numbers1]))
function2 = np.sort(np.array([numbers2]))

# Reshape the arrays to be column vectors
function1 = function1.reshape(-1, 1)
function2 = function2.reshape(-1, 1)

# Compute the cosine similarity between the functions
similarity = cosine_similarity(function1, function2)

# Print the similarity score
print("Cosine Similarity:", similarity[0][0])

运行结果:

Cosine Similarity: 1.0


问题分析与解决

问题核心出在数组维度的错误处理:

  • 你用np.sort(np.array([numbers1]))时,[numbers1]把原一维数组包装成了二维数组(形状(1,3)),后续reshape(-1,1)又将其转为(3,1)的列向量。但cosine_similarity的输入逻辑是每行代表一个样本,每列代表一个特征,你现在相当于把单个3特征样本拆成了3个单特征样本。
  • 最终取的similarity[0][0],实际是两个数组的第一个元素(都是标量)的相似度,标量的余弦相似度必然是1.0,这和你要计算的两个完整数组的相似度完全不是一回事。
  • 另外,如果你没有特殊需求,排序操作其实是多余的,但它不是导致结果异常的直接原因。

修正后的代码

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

numbers1 = np.array([17.5, 114.5, 1.4])
numbers2 = np.array([117.5, 194.5, 1113.4])

# 若需排序,直接对原数组操作即可,无需额外套一层数组
function1 = np.sort(numbers1)
function2 = np.sort(numbers2)

# 将数组转为行向量(形状(1,3)),代表1个包含3个特征的样本
function1 = function1.reshape(1, -1)
function2 = function2.reshape(1, -1)

# 计算两个样本的余弦相似度
similarity = cosine_similarity(function1, function2)

print("Cosine Similarity:", similarity[0][0])

运行后会得到约0.17的结果,符合0到1之间的预期。如果不需要排序,去掉np.sort即可,结果约为0.16。


内容的提问来源于stack exchange,提问作者newtopy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:02:21