当前位置: 面试刷题>> 余弦相似度 (经典算法题500道)


题目描述补充

题目:计算两个向量的余弦相似度

余弦相似度是一种度量两个向量在方向上相似程度的指标,而不仅仅是它们在空间中的距离。余弦相似度的取值范围是[-1, 1],其中1表示两个向量完全相似(方向相同),-1表示两个向量完全不相似(方向相反),而0则表示两者正交(即垂直)。

给定两个非零向量A和B,其中A = [a1, a2, ..., an],B = [b1, b2, ..., bn],要求编写程序计算这两个向量的余弦相似度。

示例代码

PHP 示例

function cosineSimilarity($vectorA, $vectorB) {
    $dotProduct = 0;
    $normA = 0;
    $normB = 0;

    $length = count($vectorA);
    if ($length != count($vectorB)) {
        throw new Exception("Vectors must be of the same length.");
    }

    for ($i = 0; $i < $length; $i++) {
        $dotProduct += $vectorA[$i] * $vectorB[$i];
        $normA += pow($vectorA[$i], 2);
        $normB += pow($vectorB[$i], 2);
    }

    $normA = sqrt($normA);
    $normB = sqrt($normB);

    return $dotProduct / ($normA * $normB);
}

// 示例
$vectorA = [1, 2, 3];
$vectorB = [2, 3, 4];
echo cosineSimilarity($vectorA, $vectorB);  // 输出相似度值

Python 示例

import numpy as np

def cosine_similarity(vectorA, vectorB):
    dot_product = np.dot(vectorA, vectorB)
    norm_A = np.linalg.norm(vectorA)
    norm_B = np.linalg.norm(vectorB)
    return dot_product / (norm_A * norm_B)

# 示例
vectorA = np.array([1, 2, 3])
vectorB = np.array([2, 3, 4])
print(cosine_similarity(vectorA, vectorB))  # 输出相似度值

JavaScript 示例

function cosineSimilarity(vectorA, vectorB) {
    let dotProduct = 0;
    let normA = 0;
    let normB = 0;

    if (vectorA.length !== vectorB.length) {
        throw new Error("Vectors must be of the same length.");
    }

    for (let i = 0; i < vectorA.length; i++) {
        dotProduct += vectorA[i] * vectorB[i];
        normA += vectorA[i] ** 2;
        normB += vectorB[i] ** 2;
    }

    normA = Math.sqrt(normA);
    normB = Math.sqrt(normB);

    return dotProduct / (normA * normB);
}

// 示例
const vectorA = [1, 2, 3];
const vectorB = [2, 3, 4];
console.log(cosineSimilarity(vectorA, vectorB));  // 输出相似度值

附加信息

码小课 网站中有更多关于算法和数据结构的学习内容,包括但不限于向量计算、机器学习基础、大数据处理等内容,欢迎大家访问学习,提升编程技能。

推荐面试题