LintCode C++代码 余弦相似度;

评测
Cosine similarity is a measure of similarity between two vectors of an inner product space that measures the cosine of the angle between them. The cosine of 0° is 1, and it is less than 1 for any other angle.

See wiki: Cosine Similarity

Here is the formula:

cosine-similarity

Given two vectors A and B with the same size, calculate the cosine similarity.

Return 2.0000 if cosine similarity is invalid (for example A = [0] and B = [0]).

思路: 先计算各个向量的内积;
为0 返回2;
计算两个向量的乘积;
返回相似度;

class Solution {
public:
    /**
     * @param A: An integer array.
     * @param B: An integer array.
     * @return: Cosine similarity.
     */
    double cosineSimilarity(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
计算两个 PCM 数据的余弦相似度,可以按照以下步骤进行: 1. 将 PCM 数据转换成向量形式 将两个 PCM 数据转换成向量形式,假设它们分别为 $x$ 和 $y$,长度为 $n$。可以将每个 PCM 采样值看作向量的一个分量,即: $$ \begin{aligned} x &= [x_1, x_2, ..., x_n]\\ y &= [y_1, y_2, ..., y_n] \end{aligned} $$ 2. 计算向量的内积 计算向量 $x$ 和 $y$ 的内积,即: $$ x \cdot y = \sum_{i=1}^n x_i y_i $$ 3. 计算向量的范数 分别计算向量 $x$ 和 $y$ 的范数: $$ \begin{aligned} \|x\| &= \sqrt{\sum_{i=1}^n x_i^2}\\ \|y\| &= \sqrt{\sum_{i=1}^n y_i^2} \end{aligned} $$ 4. 计算余弦相似度 使用以下公式计算余弦相似度: $$ \text{similarity} = \cos(\theta) = \frac{x \cdot y}{\|x\| \|y\|} $$ 其中,$\theta$ 表示 $x$ 和 $y$ 之间的夹角。 下面是一个使用 C++ 实现的代码示例,用于计算两个 PCM 数据的余弦相似度: ```c++ #include <iostream> #include <cmath> using namespace std; double cosine_similarity(short* x, short* y, int n) { double dot_product = 0.0, norm_x = 0.0, norm_y = 0.0; for (int i = 0; i < n; i++) { dot_product += x[i] * y[i]; norm_x += x[i] * x[i]; norm_y += y[i] * y[i]; } norm_x = sqrt(norm_x); norm_y = sqrt(norm_y); double similarity = dot_product / (norm_x * norm_y); return similarity; } int main() { short x[] = {1, 2, 3}; short y[] = {1, 2, 4}; double similarity = cosine_similarity(x, y, 3); cout << "Cosine similarity: " << similarity << endl; return 0; } ``` 这里假设 PCM 数据采样率为 1,因此可以将 PCM 采样值看作向量的分量。在实际应用中,可能需要对 PCM 数据进行预处理,例如进行滤波、降采样、归一化等操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值