向量余弦相似度
#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.bubuko.com/infodetail-2376339.html