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

Python代码出现ZeroDivisionError错误,求余弦相似度计算修复方案

修复余弦相似度计算的ZeroDivisionError错误

错误原因

你的代码把余弦相似度的计算逻辑放在了for循环内部,第一次循环时:

  • sums1 = 1*1 = 1
  • sums3 = 0*0 = 0
    此时计算分母sqrt(sums1)*sqrt(sums3)会得到1*0=0,触发ZeroDivisionError。而且余弦相似度需要遍历完所有向量元素,计算完整的分子(点积)和分母(两个向量模长的乘积)后再进行除法运算。

修复后的代码

from math import sqrt

S1 = [1,0,0,0,1,0,0,2]
S3 = [0,1,1,2,0,1,2,0]
dot_product = 0
s1_norm_sq = 0
s3_norm_sq = 0

# 遍历所有元素计算点积和模长平方
for i, j in zip(S1, S3):
    s1_norm_sq += i * i
    s3_norm_sq += j * j
    dot_product += i * j

# 计算模长并处理可能的零向量情况
s1_norm = sqrt(s1_norm_sq)
s3_norm = sqrt(s3_norm_sq)

if s1_norm == 0 or s3_norm == 0:
    # 若任一向量为全零向量,余弦相似度无意义(此处定义为0)
    cosine_similarity = 0.0
else:
    cosine_similarity = dot_product / (s1_norm * s3_norm)

print(cosine_similarity)

说明

  • 重命名变量为dot_product、s1_norm_sq、s3_norm_sq,提升代码语义可读性。
  • 将相似度计算和打印逻辑移到循环外部,确保得到完整的点积与模长后再运算。
  • 增加零向量判断,避免因全零向量再次触发除零错误,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:45:41