-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample1.go
68 lines (60 loc) · 2.15 KB
/
example1.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"fmt"
"github.com/DataIntelligenceCrew/go-faiss"
)
func Sample1() {
fmt.Println("*** Sample1 Flat L2")
index, _ := faiss.IndexFactory(2, "Flat", faiss.MetricL2)
index.Add([]float32{0,0,1,0,0,1,1,1})
fmt.Printf("Ntotal: %v\n", index.Ntotal())
distances, labels, _ := index.Search([]float32{1, 0.1}, 4)
fmt.Printf("Distances: %v, Labels: %v\n", distances, labels)
}
// *** Sample1 Flat L2
// Ntotal: 4
// Distances: [0.010000001 0.80999994 1.01 1.81], Labels: [1 3 0 2]
func Sample2() {
fmt.Println("*** Sample2 Flat IP")
index, _ := faiss.IndexFactory(2, "Flat", faiss.MetricInnerProduct)
index.Add([]float32{0,0,1,0,0,1,1,1})
distances, labels, _ := index.Search([]float32{1, 0.1}, 4)
fmt.Printf("Distances: %v, Labels: %v\n", distances, labels)
}
// *** Sample2 Flat IP
// Distances: [1.1 1 0.1 0], Labels: [3 1 2 0]
func Sample3() {
fmt.Println("*** Sample3 L2norm Flat IP")
index, _ := faiss.IndexFactory(2, "L2norm, Flat", faiss.MetricInnerProduct)
index.Add([]float32{0,0,1,0,0,1,1,1})
distances, labels, _ := index.Search([]float32{1, 0.1}, 4)
fmt.Printf("Distances: %v, Labels: %v\n", distances, labels)
}
// *** Sample3 L2norm Flat IP
// Distances: [0.99503714 0.77395725 0.09950372 0], Labels: [1 3 2 0]
func RFlatDontWorkWithTransform() {
fmt.Println("*** RFlatDontWorkWithTransform")
index, _ := faiss.IndexFactory(2, "L2norm,Flat,RFlat", faiss.MetricInnerProduct)
index.Add([]float32{0,0,1,0,0,1,1,1})
distances, labels, _ := index.Search([]float32{1, 0.1}, 4)
// RFlat returns simple IP, (Ignoring transform layer)
fmt.Printf("Distances: %v, Labels: %v\n", distances, labels)
}
// *** RFlatDontWorkWithTransform
// Distances: [1.1 1 0.1 0], Labels: [3 1 2 0]
func Refine() {
fmt.Println("*** Refine")
index, _ := faiss.IndexFactory(2, "L2norm,Flat,Refine(L2norm,Flat)", faiss.MetricInnerProduct)
index.Add([]float32{0,0,1,0,0,1,1,1})
distances, labels, _ := index.Search([]float32{1, 0.1}, 4)
fmt.Printf("Distances: %v, Labels: %v\n", distances, labels)
}
// *** Refine
// Distances: [0.99503714 0.77395725 0.09950372 0], Labels: [1 3 2 0]
func main() {
Sample1()
Sample2()
Sample3()
RFlatDontWorkWithTransform()
Refine()
}