首页 > 其他 > 详细

向量余弦相似度

时间:2017-11-01 22:47:21      阅读:373      评论:0      收藏:0      [点我收藏+]

#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;
}

向量余弦相似度

原文:http://www.cnblogs.com/donggongdechen/p/7768718.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!