<
classiterator1,
classiterator2>
46 float Cosine(iterator1 iter1, iterator1 end1,
47iterator2 iter2, iterator2 end2)
53 for( ; iter1 != end1 && iter2 != end2; ) {
54 if(iter1->first == iter2->first) {
55cosine += float(iter1->second) * float(iter2->second);
56len_a += iter1->second * iter1->second;
57len_b += iter2->second * iter2->second;
61 if(iter1->first < iter2->first) {
62len_a += iter1->second * iter1->second;
65len_b += iter2->second * iter2->second;
71 for( ; iter1 != end1; ++iter1) {
72len_a += iter1->second * iter1->second;
75 for( ; iter2 != end2; ++iter2) {
76len_b += iter2->second * iter2->second;
79cosine /= sqrt(len_a * len_b);
88 template<
classiterator1,
classiterator2>
90iterator2 iter2, iterator2 end2,
97 for( ; iter1 != end1 && iter2 != end2; ) {
98 if(iter1->first == iter2->first) {
99mink += float(iter1->second) * float(iter2->second);
100len_a += pow(iter1->second, power);
101len_b += pow(iter2->second, power);
105 if(iter1->first < iter2->first) {
106len_a += pow(iter1->second, power);
109len_b += pow(iter2->second, power);
115 for( ; iter1 != end1; ++iter1) {
116len_a += pow(iter1->second, power);
119 for( ; iter2 != end2; ++iter2) {
120len_b += pow(iter2->second, power);
123mink /= pow(len_a * len_b, 1.0f /
float(power));
131 template<
classiterator1,
classiterator2>
132 float Dot(iterator1 iter1, iterator1 end1,
133iterator2 iter2, iterator2 end2)
137 for( ; iter1 != end1 && iter2 != end2; ) {
138 if(iter1->first == iter2->first) {
139dot += float(iter1->second) * float(iter2->second);
143 if(iter1->first < iter2->first) {
159 template<
classiterator1,
classiterator2>
161iterator2 iter2, iterator2 end2)
164 for( ; iter1 != end1 && iter2 != end2; ) {
165 if(iter1->first == iter2->first) {
166 floatdiff = float(iter1->second) - iter2->second;
171 if(iter1->first < iter2->first) {
172dist += iter1->second * iter1->second;
175dist += iter2->second * iter2->second;
181 for( ; iter1 != end1; ++iter1) {
182dist += iter1->second * iter1->second;
185 for( ; iter2 != end2; ++iter2) {
186dist += iter2->second * iter2->second;
197 template<
classiterator1,
classiterator2>
199iterator2 iter2, iterator2 end2,
200 float* dot_in,
float* dist_in)
204 for( ; iter1 != end1 && iter2 != end2; ) {
205 if(iter1->first == iter2->first) {
206 floatdiff = iter1->second - iter2->second;
208dot += iter1->second * iter2->second;
213 if(iter1->first < iter2->first) {
214dist += iter1->second * iter1->second;
217dist += iter2->second * iter2->second;
223 for( ; iter1 != end1; ++iter1) {
224dist += iter1->second * iter1->second;
227 for( ; iter2 != end2; ++iter2) {
228dist += iter2->second * iter2->second;
236*dist_in = sqrt(dist);
247 template<
classiterator1,
classiterator2>
248 float Jaccard(iterator1 iter1, iterator1 end1,
249iterator2 iter2, iterator2 end2)
255 for( ; iter1 != end1 && iter2 != end2; ) {
256 if(iter1->first == iter2->first) {
257 floatv1 = float(iter1->second);
258 float v2= float(iter2->second);
267 if(iter1->first < iter2->first) {
268score_a += iter1->second * iter1->second;
271score_b += iter2->second * iter2->second;
277 for( ; iter1 != end1; ++iter1) {
278score_a += iter1->second * iter1->second;
281 for( ; iter2 != end2; ++iter2) {
282score_b += iter2->second * iter2->second;
285 return(dot / (score_a + score_b - dot));
293 template<
classiterator1,
classiterator2>
294 float Dice(iterator1 iter1, iterator1 end1,
295iterator2 iter2, iterator2 end2)
301 for( ; iter1 != end1 && iter2 != end2; ) {
302 if(iter1->first == iter2->first) {
303 floatv1 = float(iter1->second);
304 float v2= float(iter2->second);
307score_a += iter1->second;
308score_b += iter2->second;
313 if(iter1->first < iter2->first) {
314score_a += iter1->second;
317score_b += iter2->second;
323 for( ; iter1 != end1; ++iter1) {
324score_a += iter1->second;
327 for( ; iter2 != end2; ++iter2) {
328score_b += iter2->second;
331 return(dot / (score_a + score_b));
339 template<
classiterator1,
classiterator2>
340 float Overlap(iterator1 iter1, iterator1 end1,
341iterator2 iter2, iterator2 end2)
346 for( ; iter1 != end1 && iter2 != end2; ) {
347 if(iter1->first == iter2->first) {
348dot += float(iter1->second) * float(iter2->second);
349sum_a += iter1->second;
350sum_b += iter2->second;
354 if(iter1->first < iter2->first) {
355sum_a += iter1->second;
358sum_b += iter2->second;
364 for( ; iter1 != end1; ++iter1) {
365sum_a += iter1->second;
368 for( ; iter2 != end2; ++iter2) {
369sum_b += iter2->second;
372 returndot /
min(sum_a, sum_b);
Include a standard set of the NCBI C++ Toolkit most basic headers.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
float Dice(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2)
Dice coefficient.
float Distance(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2)
Euclidean distance measure.
float Dot(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2)
Dot-product similarity.
float Minkowski(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2, size_t power)
Minkowski similarity measure.
float Jaccard(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2)
Jaccard similarity.
float Cosine(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2)
Cosine similarity measure.
float Overlap(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2)
Overlap measure.
void DotAndDistance(iterator1 iter1, iterator1 end1, iterator2 iter2, iterator2 end2, float *dot_in, float *dist_in)
Dot and distance in one step.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4