@@ 786-812 (lines=27) @@ | ||
783 | # ResultHeap |
|
784 | ########################################### |
|
785 | ||
786 | class ResultHeap: |
|
787 | """Accumulate query results from a sliced dataset. The final result will |
|
788 | be in self.D, self.I.""" |
|
789 | ||
790 | def __init__(self, nq, k): |
|
791 | " nq: number of query vectors, k: number of results per query " |
|
792 | self.I = np.zeros((nq, k), dtype='int64') |
|
793 | self.D = np.zeros((nq, k), dtype='float32') |
|
794 | self.nq, self.k = nq, k |
|
795 | heaps = float_maxheap_array_t() |
|
796 | heaps.k = k |
|
797 | heaps.nh = nq |
|
798 | heaps.val = swig_ptr(self.D) |
|
799 | heaps.ids = swig_ptr(self.I) |
|
800 | heaps.heapify() |
|
801 | self.heaps = heaps |
|
802 | ||
803 | def add_result(self, D, I): |
|
804 | """D, I do not need to be in a particular order (heap or sorted)""" |
|
805 | assert D.shape == (self.nq, self.k) |
|
806 | assert I.shape == (self.nq, self.k) |
|
807 | self.heaps.addn_with_ids( |
|
808 | self.k, faiss.swig_ptr(D), |
|
809 | faiss.swig_ptr(I), self.k) |
|
810 | ||
811 | def finalize(self): |
|
812 | self.heaps.reorder() |
|
813 |
@@ 84-109 (lines=26) @@ | ||
81 | print('set nprobe=', nprobe) |
|
82 | faiss.ParameterSpace().set_index_parameter(index_1, 'nprobe', nprobe) |
|
83 | ||
84 | class ResultHeap: |
|
85 | """ Combine query results from a sliced dataset """ |
|
86 | ||
87 | def __init__(self, nq, k): |
|
88 | " nq: number of query vectors, k: number of results per query " |
|
89 | self.I = np.zeros((nq, k), dtype='int64') |
|
90 | self.D = np.zeros((nq, k), dtype='float32') |
|
91 | self.nq, self.k = nq, k |
|
92 | heaps = faiss.float_maxheap_array_t() |
|
93 | heaps.k = k |
|
94 | heaps.nh = nq |
|
95 | heaps.val = faiss.swig_ptr(self.D) |
|
96 | heaps.ids = faiss.swig_ptr(self.I) |
|
97 | heaps.heapify() |
|
98 | self.heaps = heaps |
|
99 | ||
100 | def add_batch_result(self, D, I, i0): |
|
101 | assert D.shape == (self.nq, self.k) |
|
102 | assert I.shape == (self.nq, self.k) |
|
103 | I += i0 |
|
104 | self.heaps.addn_with_ids( |
|
105 | self.k, faiss.swig_ptr(D), |
|
106 | faiss.swig_ptr(I), self.k) |
|
107 | ||
108 | def finalize(self): |
|
109 | self.heaps.reorder() |
|
110 | ||
111 | stats = faiss.cvar.indexIVF_stats |
|
112 | stats.reset() |
@@ 76-101 (lines=26) @@ | ||
73 | return np.ascontiguousarray(x, dtype='float32') |
|
74 | ||
75 | ||
76 | class ResultHeap: |
|
77 | """ Combine query results from a sliced dataset """ |
|
78 | ||
79 | def __init__(self, nq, k): |
|
80 | " nq: number of query vectors, k: number of results per query " |
|
81 | self.I = np.zeros((nq, k), dtype='int64') |
|
82 | self.D = np.zeros((nq, k), dtype='float32') |
|
83 | self.nq, self.k = nq, k |
|
84 | heaps = faiss.float_maxheap_array_t() |
|
85 | heaps.k = k |
|
86 | heaps.nh = nq |
|
87 | heaps.val = faiss.swig_ptr(self.D) |
|
88 | heaps.ids = faiss.swig_ptr(self.I) |
|
89 | heaps.heapify() |
|
90 | self.heaps = heaps |
|
91 | ||
92 | def add_batch_result(self, D, I, i0): |
|
93 | assert D.shape == (self.nq, self.k) |
|
94 | assert I.shape == (self.nq, self.k) |
|
95 | I += i0 |
|
96 | self.heaps.addn_with_ids( |
|
97 | self.k, faiss.swig_ptr(D), |
|
98 | faiss.swig_ptr(I), self.k) |
|
99 | ||
100 | def finalize(self): |
|
101 | self.heaps.reorder() |
|
102 | ||
103 | ||
104 | def compute_GT_sliced(xb, xq, k): |
@@ 75-100 (lines=26) @@ | ||
72 | return np.ascontiguousarray(x, dtype='float32') |
|
73 | ||
74 | ||
75 | class ResultHeap: |
|
76 | """ Combine query results from a sliced dataset """ |
|
77 | ||
78 | def __init__(self, nq, k): |
|
79 | " nq: number of query vectors, k: number of results per query " |
|
80 | self.I = np.zeros((nq, k), dtype='int64') |
|
81 | self.D = np.zeros((nq, k), dtype='float32') |
|
82 | self.nq, self.k = nq, k |
|
83 | heaps = faiss.float_maxheap_array_t() |
|
84 | heaps.k = k |
|
85 | heaps.nh = nq |
|
86 | heaps.val = faiss.swig_ptr(self.D) |
|
87 | heaps.ids = faiss.swig_ptr(self.I) |
|
88 | heaps.heapify() |
|
89 | self.heaps = heaps |
|
90 | ||
91 | def add_batch_result(self, D, I, i0): |
|
92 | assert D.shape == (self.nq, self.k) |
|
93 | assert I.shape == (self.nq, self.k) |
|
94 | I += i0 |
|
95 | self.heaps.addn_with_ids( |
|
96 | self.k, faiss.swig_ptr(D), |
|
97 | faiss.swig_ptr(I), self.k) |
|
98 | ||
99 | def finalize(self): |
|
100 | self.heaps.reorder() |
|
101 | ||
102 | ||
103 |
@@ 72-97 (lines=26) @@ | ||
69 | ||
70 | ||
71 | ||
72 | class ResultHeap: |
|
73 | """ Combine query results from a sliced dataset (for k-nn search) """ |
|
74 | ||
75 | def __init__(self, nq, k): |
|
76 | " nq: number of query vectors, k: number of results per query " |
|
77 | self.I = np.zeros((nq, k), dtype='int64') |
|
78 | self.D = np.zeros((nq, k), dtype='float32') |
|
79 | self.nq, self.k = nq, k |
|
80 | heaps = faiss.float_maxheap_array_t() |
|
81 | heaps.k = k |
|
82 | heaps.nh = nq |
|
83 | heaps.val = faiss.swig_ptr(self.D) |
|
84 | heaps.ids = faiss.swig_ptr(self.I) |
|
85 | heaps.heapify() |
|
86 | self.heaps = heaps |
|
87 | ||
88 | def add_batch_result(self, D, I, i0): |
|
89 | assert D.shape == (self.nq, self.k) |
|
90 | assert I.shape == (self.nq, self.k) |
|
91 | I += i0 |
|
92 | self.heaps.addn_with_ids( |
|
93 | self.k, faiss.swig_ptr(D), |
|
94 | faiss.swig_ptr(I), self.k) |
|
95 | ||
96 | def finalize(self): |
|
97 | self.heaps.reorder() |
|
98 | ||
99 | def distribute_weights(weights, nbin): |
|
100 | """ assign a set of weights to a smaller set of bins to balance them """ |