From b4eb20f2c059f264cd0c12bd48bd316460f71f57 Mon Sep 17 00:00:00 2001 From: groot Date: Wed, 18 Aug 2021 11:16:10 +0800 Subject: [PATCH] Fix calc_distance TANIMOTO bug (#7140) Signed-off-by: yhmo --- internal/util/distance/calc_distance.go | 5 +++-- internal/util/distance/calc_distance_test.go | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/internal/util/distance/calc_distance.go b/internal/util/distance/calc_distance.go index dda785c7c3..d3244f1a92 100644 --- a/internal/util/distance/calc_distance.go +++ b/internal/util/distance/calc_distance.go @@ -239,11 +239,12 @@ func CalcTanimotoCoefficient(dim int64, hamming []int32) ([]float32, error) { array := make([]float32, len(hamming)) for i := 0; i < len(hamming); i++ { - if hamming[i] >= int32(dim)*2 { + if hamming[i] > int32(dim) { err := errors.New("Invalid hamming for tanimoto") return nil, err } - array[i] = float32(hamming[i]) / (float32(dim)*2 - float32(hamming[i])) + equalBits := int32(dim) - hamming[i] + array[i] = float32(equalBits) / (float32(dim)*2 - float32(equalBits)) } return array, nil diff --git a/internal/util/distance/calc_distance_test.go b/internal/util/distance/calc_distance_test.go index 7b0802c87c..49798a6abb 100644 --- a/internal/util/distance/calc_distance_test.go +++ b/internal/util/distance/calc_distance_test.go @@ -228,7 +228,7 @@ func TestCalcHamming(t *testing.T) { hamming := make([]int32, 1) hamming[0] = n tanimoto, err := CalcTanimotoCoefficient(dim, hamming) - realTanimoto := float64(n) / (float64(dim)*2.0 - float64(n)) + realTanimoto := float64(int32(dim)-n) / (float64(dim)*2.0 - float64(int32(dim)-n)) assert.Nil(t, err) assert.Less(t, math.Abs(float64(tanimoto[0])-realTanimoto), float64(PRECISION)) }