@Override public double similarity(long u1, Long2DoubleMap v1, long u2, Long2DoubleMap v2) { return delegate.similarity(v1, v2); }
@Override public double similarity(long i1, Long2DoubleMap v1, long i2, Long2DoubleMap v2) { return delegate.similarity(v1, v2); }
@Override public double similarity(long i1, Long2DoubleMap v1, long i2, Long2DoubleMap v2) { return delegate.similarity(v1, v2); }
@Override public double similarity(Long2DoubleMap vec1, Long2DoubleMap vec2) { double s = delegate.similarity(vec1, vec2); int n = LongUtils.intersectSize(vec1.keySet(), vec2.keySet()); s *= n; return s / max(n, threshold); }
@Test public void testEmptyVector() { assertThat(sim.similarity(Long2DoubleMaps.EMPTY_MAP, Long2DoubleMaps.EMPTY_MAP), closeTo(0, EPSILON)); }
@Test public void testSelfSimilarity() { long keys[] = {1, 5, 7}; double values[] = {1.5, 2.5, 2}; Long2DoubleMap v = Long2DoubleSortedArrayMap.wrapUnsorted(keys, values); assertThat(sim.similarity(v, v), closeTo(1, EPSILON)); assertThat(sim.similarity(v, new Long2DoubleOpenHashMap(v)), closeTo(1, EPSILON)); }
@Override public double similarity(long i1, Long2DoubleMap v1, long i2, Long2DoubleMap v2) { return delegate.similarity(v1, v2); }
@Override public double similarity(long u1, Long2DoubleMap v1, long u2, Long2DoubleMap v2) { return delegate.similarity(v1, v2); }
@Test public void testDisjointSimilarity() { long keys[] = {1, 5, 7}; double values[] = {1.5, 2.5, 2}; long keys2[] = {2, 4, 8}; Long2DoubleSortedArrayMap v1 = Long2DoubleSortedArrayMap.wrapUnsorted(keys, values); Long2DoubleSortedArrayMap v2 = Long2DoubleSortedArrayMap.wrapUnsorted(keys2, values); assertThat(sim.similarity(v1, v2), closeTo(0, EPSILON)); }
@Test public void testSimilarity() { long k1[] = {1, 5, 7}; double val1[] = {1.5, 2.5, 2}; long k2[] = {1, 5, 6}; double val2[] = {2, 2.5, 1.7}; Long2DoubleMap v1 = Long2DoubleSortedArrayMap.wrapUnsorted(k1, val1); Long2DoubleMap v2 = Long2DoubleSortedArrayMap.wrapUnsorted(k2, val2); assertThat(sim.similarity(v1, v2), closeTo(1, EPSILON)); }
@Test public void testSimilarity2() { long k1[] = {1, 5, 7, 8}; double val1[] = {1.5, 2.5, 2, 3.5}; long k2[] = {1, 5, 7, 9}; double val2[] = {2, 2.5, 1.7, 0.8}; Long2DoubleMap v1 = Long2DoubleSortedArrayMap.wrapUnsorted(k1, val1); Long2DoubleMap v2 = Long2DoubleSortedArrayMap.wrapUnsorted(k2, val2); assertThat(sim.similarity(v1, v2), closeTo(0.6185896, EPSILON)); } }
@Override public double similarity(Long2DoubleMap vec1, Long2DoubleMap vec2) { double s = delegate.similarity(vec1, vec2); int n = LongUtils.intersectSize(vec1.keySet(), vec2.keySet()); s *= n; return s / max(n, threshold); }