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

如何获取字典中所有词对?Python向量点积计算异常排查

Python向量点积词对生成问题解决

问题回顾

我正在Python中计算两个向量的点积,最终目的是计算余弦相似度。在计算点积时,我创建了一个单独的字典dot_products来存储每对单词的点积,以('danced', 'sang')为例。这两个词都是vectors字典中的键,但当我尝试获取vectors字典中的所有词对时,('danced', 'sang')这一对似乎没有出现在dot_products字典中。我在获取所有可能的词对时是不是哪里出错了?我觉得应该要用嵌套循环来实现,对吗?

正确的词对生成方式

1. 生成有序词对(含反向对)

如果需要保留('danced', 'sang')和('sang', 'danced')这类双向词对,直接用两层嵌套循环遍历所有键即可:

vectors = {'danced': [1,2,3], 'sang': [4,5,6], ...}  # 你的向量字典
dot_products = {}

# 两层嵌套循环遍历所有词对
for word1 in vectors:
    for word2 in vectors:
        # 计算两个向量的点积
        dot_product = sum(a * b for a, b in zip(vectors[word1], vectors[word2]))
        dot_products[(word1, word2)] = dot_product

2. 生成无序词对(仅保留单向)

如果只需要('danced', 'sang')这类不重复的单向词对,可以用itertools.combinations来简化代码,避免重复计算:

from itertools import combinations

vectors = {'danced': [1,2,3], 'sang': [4,5,6], ...}
dot_products = {}

# 生成所有不重复的两字词对
for word1, word2 in combinations(vectors.keys(), 2):
    dot_product = sum(a * b for a, b in zip(vectors[word1], vectors[word2]))
    dot_products[(word1, word2)] = dot_product
    # 如果需要同时存入反向对,添加下面这行
    # dot_products[(word2, word1)] = dot_product

排查错误点

  • 检查循环逻辑:如果你的嵌套循环里加了跳过相同单词的判断(比如if word1 == word2: continue),那没问题,但如果有其他不合理的条件,可能会过滤掉目标词对;
  • 核对拼写:确认vectors字典里的键'danced'、'sang'和你查询的拼写完全一致(比如大小写、是否有空格);
  • 向量长度:如果两个向量长度不一致,zip会截断到较短的长度,但这不会导致词对不存入字典,只会影响点积结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:52:42