示例#1
0
double *copyVector(double* vec, int n, const char* name) {
  int i;
  double* result = svd_doubleArray(n, FALSE, name);
  for (i = 0; i < n; i++)
    result[i] = vec[i];
  return result;
}
示例#2
0
SMat svdNewSMat(int rows, int cols, int vals) {
    SMat S = (SMat) calloc(1, sizeof(struct smat));
    if (!S) {
        perror("svdNewSMat");
        return NULL;
    }
    S->rows = rows;
    S->cols = cols;
    S->vals = vals;
    S->pointr = svd_longArray(cols + 1, TRUE, "svdNewSMat: pointr");
    if (!S->pointr) {
        svdFreeSMat(S);
        return NULL;
    }
    S->rowind = svd_longArray(vals, FALSE, "svdNewSMat: rowind");
    if (!S->rowind) {
        svdFreeSMat(S);
        return NULL;
    }
    S->value  = svd_doubleArray(vals, FALSE, "svdNewSMat: value");
    if (!S->value)  {
        svdFreeSMat(S);
        return NULL;
    }
    return S;
}
示例#3
0
double *svdLoadDenseArray(const char *filename, int *np, char binary) {
  int i, n;
  double *a;
  int nfound;

  FILE *file = svd_readFile(filename);
  if (!file) {
    svd_error("svdLoadDenseArray: failed to read %s", filename);
    return NULL;
  }

  if (binary) svd_readBinInt(file, np);
  else {
      nfound = fscanf(file, " %d", np);
      if (nfound == 0) svd_error("svdLoadDenseArray: didn't get np");
  }
  n = *np;
  a = svd_doubleArray(n, FALSE, "svdLoadDenseArray: a");
  if (!a) return NULL;
  if (binary) {
    float f;
    for (i = 0; i < n; i++) {
      svd_readBinFloat(file, &f);
      a[i] = f;
    }
  } else {
      for (i = 0; i < n; i++) {
          nfound = fscanf(file, " %lf\n", a + i);
          if (nfound == 0) svd_error("svdLoadDenseArray: didn't get value");
      }
  }
  svd_closeFile(file);
  return a;
}
示例#4
0
SMat svdNewSMat(int rows, int cols, int vals) {
  SMat S = (SMat) calloc(1, sizeof(struct smat));
  if (!S) {perror("svdNewSMat"); return NULL;}
  S->h.transposed = svdTransposeS;
  S->h.free = svdFreeSMat;
  S->h.mat_by_vec = sparse_mat_by_vec;
  S->h.mat_transposed_by_vec = sparse_mat_transposed_by_vec;
  S->h.rows = rows;
  S->h.cols = cols;
  S->h.vals = vals;
  S->pointr = svd_longArray(cols + 1, TRUE, "svdNewSMat: pointr");
  if (!S->pointr) {svdFreeSMat(S); return NULL;}
  S->rowind = svd_longArray(vals, FALSE, "svdNewSMat: rowind");
  if (!S->rowind) {svdFreeSMat(S); return NULL;}
  S->value  = svd_doubleArray(vals, FALSE, "svdNewSMat: value");
  if (!S->value)  {svdFreeSMat(S); return NULL;}
  S->offset_for_row = NULL;
  S->offset_for_col = NULL;
  return S;
}
示例#5
0
文件: svdlib.c 项目: ALSAREM/ENsEN
double *svdLoadDenseArray(char *filename, int *np, char binary) {
  int i, n;
  double *a;

  FILE *file = svd_readFile(filename);
  if (!file) {
    svd_error("svdLoadDenseArray: failed to read %s", filename);
    return NULL;
  }
  if (binary) {
    svd_readBinInt(file, np);
  } else if (fscanf(file, " %d", np) != 1) {
    svd_error("svdLoadDenseArray: error reading %s", filename);
    svd_closeFile(file);
    return NULL;    
  }
  n = *np;
  a = svd_doubleArray(n, FALSE, "svdLoadDenseArray: a");
  if (!a) return NULL;
  if (binary) {
    float f;
    for (i = 0; i < n; i++) {
      svd_readBinFloat(file, &f);
      a[i] = f;
    }
  } else {
    for (i = 0; i < n; i++) {
      if (fscanf(file, " %lf\n", a + i) != 1) {
	svd_error("svdLoadDenseArray: error reading %s", filename);
	break;
      }
    }
  }
  svd_closeFile(file);
  return a;
}