向量余弦相似度

Posted 东宫得臣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向量余弦相似度相关的知识,希望对你有一定的参考价值。

#include <iostream>
#include <vector>
#include <cmath>

template <typename DataType>
double mycosine(typename::std::vector<DataType>& arrayA, typename::std::vector<DataType>& arrayB) {
    if(arrayA.empty() || arrayB.empty())
        return 0;

    double sumarrayA=0.0,sumarrayB=0.0;
    double cosine=0.0;

    for(typename::std::vector<DataType>::iterator itA=arrayA.begin(),itB=arrayB.begin();itA!=arrayA.end(),itB!=arrayB.end();++itA,++itB) {
        sumarrayA+=(*itA)*(*itA);
        sumarrayB+=(*itB)*(*itB);
        cosine+=(*itA)*(*itB);
    }

    sumarrayA=sqrt(sumarrayA);
    sumarrayB=sqrt(sumarrayB);

    if((sumarrayA-0<0.0001) || (sumarrayB-0<0.0001)) {
        return 0;
    }

    cosine/=(sumarrayA*sumarrayB);

    return cosine;
}

int main() {
    int length;

    std::vector<int> arrayA;
    std::vector<int> arrayB;

    char tag=‘y‘;
    int temp;

    while(tag==‘y‘) {
        arrayA.clear();
        arrayB.clear();

        std::cin>>length;

        for(size_t i=0;i<length;++i) {
            std::cin>>temp;
            arrayA.push_back(temp);
        }

        for(size_t i=0;i<length;++i) {
            std::cin>>temp;
            arrayB.push_back(temp);
        }

        std::cout<<mycosine(arrayA,arrayB)<<std::endl;

        std::cin>>tag;
    }

    return 0;
}

以上是关于向量余弦相似度的主要内容,如果未能解决你的问题,请参考以下文章

余弦相似度

20-余弦相似度及其R实现

Spark笔记(1) :余弦相似度计算

相似度算法之余弦相似度

智能推荐算法基础-余弦相似度计算

Java根据余弦定理计算文本相似度