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

Python中如何从向量列表中匹配与随机向量最相似的向量

在Python中找出与目标向量最相似的向量

要解决这个问题,核心是比较向量的方向相似性,通常用余弦相似度来衡量——余弦值越接近1,两个向量的方向就越一致。下面是两种实用的实现方式:

纯Python实现(无额外依赖)

先定义计算余弦相似度的函数,再遍历向量列表找出相似度最高的向量:

def cosine_similarity(a, b):
    # 计算两个向量的点积
    dot_product = a[0] * b[0] + a[1] * b[1]
    # 计算向量的模长(长度)
    mag_a = (a[0]**2 + a[1]**2)**0.5
    mag_b = (b[0]**2 + b[1]**2)**0.5
    # 返回余弦相似度
    return dot_product / (mag_a * mag_b)

# 给定的向量列表和目标向量
vectors = [(10,0), (-10,0), (0,10), (0,-10)]
target_vector = (200, -300)

# 计算每个向量与目标向量的相似度
similarities = [cosine_similarity(vec, target_vector) for vec in vectors]
# 找出相似度最大的向量
max_index = similarities.index(max(similarities))
most_similar_vec = vectors[max_index]

print(f"最相似的向量是: {most_similar_vec}")

使用NumPy实现(高效处理大量向量)

如果需要处理更多向量,用NumPy的批量向量运算会更高效:

import numpy as np

vectors = np.array([(10,0), (-10,0), (0,10), (0,-10)])
target_vector = np.array((200, -300))

# 批量计算点积、模长和余弦相似度
dot_products = np.dot(vectors, target_vector)
vec_magnitudes = np.linalg.norm(vectors, axis=1)
target_magnitude = np.linalg.norm(target_vector)
similarities = dot_products / (vec_magnitudes * target_magnitude)

# 找出相似度最高的向量
max_index = np.argmax(similarities)
most_similar_vec = vectors[max_index]

print(f"最相似的向量是: {tuple(most_similar_vec)}")

结果说明

目标向量(200,-300)的方向是x正、y负,计算后会发现(0,-10)的余弦相似度最高(约0.83),是最匹配的向量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:22:41