예제 #1
0
hkm_t *hkm_read (const char *filename)
{
  int ret = 0, l;
  FILE *f = fopen (filename, "r");

  int nlevel, bf, d;

  ret = fread (&nlevel, sizeof (nlevel), 1, f);
  HKM_READ_ERROR (ret, 1);
  ret = fread (&bf, sizeof (bf), 1, f);
  HKM_READ_ERROR (ret, 1);
  ret = fread (&d, sizeof (d), 1, f);
  HKM_READ_ERROR (ret, 1);


  hkm_t *hkm = hkm_new (d, nlevel, bf);
  assert (hkm);


  int k = hkm->bf;
  for (l = 0; l < hkm->nlevel; l++) {
    /* need to allocate the memory */
    ret = fvec_fread (f, hkm->centroids[l], k * hkm->d);
    HKM_READ_ERROR (ret, k * hkm->d);

    k *= hkm->bf;
  }

  hkm->k = k / hkm->bf;
  return hkm;
}
예제 #2
0
int fvec_read (const char *fname, int d, float *a, int o_f) {
  FILE * f = fopen(fname, "r");

  if(!f) {
    fprintf(stderr, "cannot open %s: %s\n", fname, strerror(errno));
    return -1;
  }
  
  int ret = fseek(f, (4 * d + 4) * o_f, SEEK_SET);
  if(ret < 0) {
    fprintf(stderr, "seek error in %s: %s\n", fname, strerror(errno));
    fclose(f);
    return -1;
  }

  ret = fvec_fread(f, a, d);

  fclose(f);

  return ret;
}