码迷,mamicode.com
首页 > 其他好文 > 详细

向量余弦相似度

时间:2017-11-01 22:55:31      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:sum   ret   char   +=   相似度   ica   type   col   0.00   

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

向量余弦相似度

标签:sum   ret   char   +=   相似度   ica   type   col   0.00   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!