MCPcopy Create free account
hub / github.com/dblalock/bolt / set_centroids

Method set_centroids

python/bolt/bolt_api.py:245–283  ·  view source on GitHub ↗
(self, centroids)

Source from the content-addressed store, hash-verified

243 self._encoder = bolt.BoltEncoder(nbytes)
244
245 def set_centroids(self, centroids):
246 # accept centroids as 2D array like cpp; but we'll need them 3D
247 nrows, ndims = centroids.shape
248 ncentroids = 16
249 codebook_sz = ncentroids * ndims
250
251 self.centroids = np.empty((ncentroids, self.ncodebooks, ndims))
252 for m in range(self.ncodebooks):
253 start_idx = m * ncentroids # start idx of block
254 end_idx = start_idx + ncentroids
255 block = centroids[start_idx:end_idx]
256 self.centroids[:, m, :] = block
257
258 # check whether centroids bridge is broken
259 self._encoder.set_centroids(centroids)
260 raw_centroids = self._encoder.centroids()
261 cpp_centroids = np.full(raw_centroids.shape, -1)
262
263 print "ncentroids, ncodebooks, ndims ", self.centroids.shape
264
265 inbuff = raw_centroids.ravel()
266 outbuff = np.zeros(raw_centroids.size) - 1
267 for m in range(self.ncodebooks):
268 start_idx = m * codebook_sz # start idx of block
269 for i in range(ncentroids): # for each row in block
270 for j in range(ndims): # for each col in block
271 in_idx = start_idx + (ndims * i) + j
272 out_idx = start_idx + (ncentroids * j) + i
273 outbuff[in_idx] = inbuff[out_idx]
274
275 cpp_centroids = outbuff.reshape(centroids.shape)
276
277 # print "py, cpp centroids: "
278 # print centroids[:20]
279 # print cpp_centroids[:20]
280 # print centroids.shape
281 # print cpp_centroids.shape
282
283 assert np.allclose(centroids, cpp_centroids)
284
285 def set_data(self, X):
286 self.X = X

Callers 1

fitMethod · 0.45

Calls 2

centroidsMethod · 0.80
emptyMethod · 0.45

Tested by

no test coverage detected