def main(argv): # read in arguments args = sys.argv[1:] if len(args) > 0 and args[0] in ("--help", "-h"): print HELP_USAGE return assert len(args) == 3, "wrong number of command parameters!" featDir = args[0] k = int(args[1]) gmmDir = args[2] trainMat = np.load(featDir).astype(np.float32) trainNum, featNum = np.shape(trainMat) flags = yael.GMM_FLAGS_W niter = 20 gmm = yael.gmm_learn( featNum, trainNum, k, niter, yael.FloatArray.acquirepointer(yael.numpy_to_fvec(trainMat)), 1, random.randrange(1000000), 8, flags, ) f = open(gmmDir, "w") yael.gmm_write(gmm, f) del gmm
def writeXvecs(points, filename): if type(points) is not np.ndarray: raise Exception('Convert to numpy before serializing!') dim = points.shape[1] count = points.shape[0] extension = filename.strip().split('.')[-1] if extension == 'fvecs': points = yael.numpy_to_fvec(points.astype('float32')) yael.fvecs_write(filename, dim, count, points) elif extension == 'bvecs': file = open(filename, 'wb') #raise Exception('Writing of bvecs is not implemented yet!') dimData = struct.pack('i', dim) for i in xrange(count): point = points[i,:].astype('uint8') file.write(dimData) point.tofile(file) file.close() elif extension == 'i8vecs': file = open(filename, 'wb') dimData = struct.pack('i', dim) for i in xrange(count): point = points[i,:].astype('int8') file.write(dimData) point.tofile(file) file.close() elif extension == 'ivecs': points = yael.numpy_to_ivec(points) yael.ivecs_write(filename, dim, count, points) else: raise Exception('Bad file extension!')
def writeXvecs(points, filename): if type(points) is not np.ndarray: raise Exception('Convert to numpy before serializing!') dim = points.shape[1] count = points.shape[0] extension = filename.strip().split('.')[-1] if extension == 'fvecs': points = yael.numpy_to_fvec(points.astype('float32')) yael.fvecs_write(filename, dim, count, points) elif extension == 'bvecs': file = open(filename, 'wb') dimData = struct.pack('i', dim) for i in xrange(count): point = points[i, :].astype('uint8') file.write(dimData) point.tofile(file) file.close() elif extension == 'i8vecs': file = open(filename, 'wb') dimData = struct.pack('i', dim) for i in xrange(count): point = points[i, :].astype('int8') file.write(dimData) point.tofile(file) file.close() elif extension == 'ivecs': points = yael.numpy_to_ivec(points) yael.ivecs_write(filename, dim, count, points) else: raise Exception('Bad file extension!')
def initYaelGmm(self): self.yael_gmm = yael.gmm_t() self.yael_gmm.d = self.n_features self.yael_gmm.k = self.n_components self.yael_gmm.mu = yael.numpy_to_fvec_ref(self.means_) self.yael_gmm.sigma = yael.numpy_to_fvec(self.covars_) self.yael_gmm.w = yael.numpy_to_fvec_ref(self.weights_)
def writeXvecsToOpenFile(points, file, extension): if type(points) is not np.ndarray: raise Exception('Convert to numpy before serializing!') dim = points.shape[1] count = points.shape[0] if extension == 'fvecs': points = yael.numpy_to_fvec(points.astype('float32')) yael.fvecs_fwrite(file, dim, count, points) elif extension == 'bvecs': raise Exception('Writing of bvecs is not implemented yet!') elif extension == 'ivecs': points = yael.numpy_to_ivec(points) yael.ivecs_fwrite(file, dim, count, points) else: raise Exception('Bad file extension!')
def yaelFV(self, patches, improved=True): K = self.gmm.n_components N, d = patches.shape flags = yael.GMM_FLAGS_MU | yael.GMM_FLAGS_SIGMA v = yael.numpy_to_fvec(patches) out = yael.fvec_new_0(2 * K * d) self.gmm.initYaelGmm() yael.gmm_fisher(patches.shape[0], v, self.gmm.yael_gmm, flags, out) vector = yael.fvec_to_numpy_acquire(out, 2 * K * d) if improved: # Signed square-rooting vector = np.sign(vector) * np.sqrt(np.abs(vector)) # L2 normalization vector /= np.linalg.norm(vector) return vector
from yael import yael import numpy as np print('Testing Yael <-> numpy interface') if 'fvec_to_numpy' not in dir(yael): #globals(): print('Numpy interface not compiled in') sys.exit(1) print('float array') numpy_a = np.array(list(range(5)), dtype='float32') print(numpy_a) print('-> Yael A') yael_a = yael.FloatArray.acquirepointer(yael.numpy_to_fvec(numpy_a)) n = numpy_a.size yael.fvec_print(yael_a, n) print('-> Numpy A') print(yael.fvec_to_numpy(yael_a, n)) print('int array') numpy_a = np.array(list(range(5)), dtype='int32') print(numpy_a) print('-> Yael A2') yael_a = yael.IntArray.acquirepointer(yael.numpy_to_ivec(numpy_a)) n = numpy_a.size yael.ivec_print(yael_a, n) print('-> Numpy A2')