package clear.util.cluster;
import com.carrotsearch.hppc.IntDoubleOpenHashMap;
import com.carrotsearch.hppc.ObjectDoubleOpenHashMap;
import com.carrotsearch.hppc.ObjectIntOpenHashMap;
import com.carrotsearch.hppc.cursors.ObjectCursor;
public class Similarity {
static public double cosine(IntDoubleOpenHashMap map1, IntDoubleOpenHashMap map2) {
double scala1 = 0, scala2 = 0, dot = 0, val;
for (int key : map1.keys().toArray()) {
val = map1.get(key);
if (map2.containsKey(key)) {
dot += (val * map2.get(key));
}
scala1 += (val * val);
}
for (int key : map2.keys().toArray()) {
val = map2.get(key);
scala2 += (val * val);
}
scala1 = Math.sqrt(scala1);
scala2 = Math.sqrt(scala2);
return dot / (scala1 * scala2);
}
static public double cosine(ObjectDoubleOpenHashMap<String> map1, ObjectDoubleOpenHashMap<String> map2) {
double scala1 = 0, scala2 = 0, dot = 0, val;
String key;
for (ObjectCursor<String> cur : map1.keys()) {
key = cur.value;
val = map1.get(key);
if (map2.containsKey(key)) {
dot += (val * map2.get(key));
}
scala1 += (val * val);
}
for (ObjectCursor<String> cur : map2.keys()) {
val = map2.get(cur.value);
scala2 += (val * val);
}
scala1 = Math.sqrt(scala1);
scala2 = Math.sqrt(scala2);
return dot / (scala1 * scala2);
}
static public double cosine(ObjectIntOpenHashMap<String> map1, ObjectIntOpenHashMap<String> map2) {
double scala1 = 0, scala2 = 0, dot = 0, val;
String key;
for (ObjectCursor<String> cur : map1.keys()) {
key = cur.value;
val = map1.get(key);
if (map2.containsKey(key)) {
dot += (val * map2.get(key));
}
scala1 += (val * val);
}
for (ObjectCursor<String> cur : map2.keys()) {
val = map2.get(cur.value);
scala2 += (val * val);
}
scala1 = Math.sqrt(scala1);
scala2 = Math.sqrt(scala2);
return dot / (scala1 * scala2);
}
}