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

如何在Python中从余弦距离矩阵找到与指定诗歌最远的诗歌

问题解决:找到与指定诗歌距离最远的作品

问题背景

我有一个名为dist的余弦距离矩阵,对应数据集中1104首诗歌的两两余弦距离,矩阵的行、列顺序和存储诗歌元数据(标题、作者等)的列表all_meta0完全一致。现在要找到和指定诗歌《The Parade》距离最远的诗歌——《The Parade》对应dist矩阵的第二行(零基索引1),也就是找出该行中余弦距离值最大的条目对应的诗歌。

我整理了大致操作步骤,但不确定具体实现:

  • 提取dist矩阵的第二行,该行记录《The Parade》与所有诗歌的距离
  • 将该行中自身对应的距离值设为-1,排除自身对比
  • 找到该行最大值对应的索引,这个索引就是最远诗歌的位置
  • 通过该索引从all_meta0中获取对应诗歌的元数据

已知的dist矩阵生成代码

mds = MDS(n_components=2, dissimilarity="precomputed", random_state=1)
pos = mds.fit_transform(dist)
dist = 1 - cosine_similarity(dtm)
# 查看dist前5行、矩阵行数和列数
dist[0:5], len(dist), len(dist[0])
pos = mds.fit_transform(dist)

具体实现代码

以下是对应步骤的可运行代码:

# 1. 提取指定行(索引1,对应《The Parade》)
target_row = dist[1].copy()

# 2. 将自身距离设为-1,排除自身
target_row[1] = -1

# 3. 找到最大值对应的索引
farthest_idx = target_row.argmax()

# 4. 获取对应诗歌的元数据
farthest_poem_meta = all_meta0[farthest_idx]

# 输出结果
print("距离《The Parade》最远的诗歌元数据:", farthest_poem_meta)

代码说明

  • 使用.copy()是为了避免修改原dist矩阵的原始数据,保证后续计算不受影响
  • argmax()方法会直接返回一维数组中最大值的索引,高效适配当前场景
  • 最终通过索引从all_meta0中取出元数据,即可得到目标诗歌的完整信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:40:01