如何在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
相关产品推荐
相关产品推荐

