static SMat svdLoadSparseBinaryFile(FILE *file) { int rows, cols, vals, n, c, i, v, r, e = 0; float f; SMat S; e += svd_readBinInt(file, &rows); e += svd_readBinInt(file, &cols); e += svd_readBinInt(file, &vals); if (e) { svd_error("svdLoadSparseBinaryFile: bad file format"); return NULL; } S = svdNewSMat(rows, cols, vals); if (!S) return NULL; for (c = 0, v = 0; c < cols; c++) { if (svd_readBinInt(file, &n)) { svd_error("svdLoadSparseBinaryFile: bad file format"); return NULL; } S->pointr[c] = v; for (i = 0; i < n; i++, v++) { e += svd_readBinInt(file, &r); e += svd_readBinFloat(file, &f); if (e) { svd_error("svdLoadSparseBinaryFile: bad file format"); return NULL; } S->rowind[v] = r; S->value[v] = f; } } S->pointr[cols] = vals; return S; }
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; }
static DMat svdLoadDenseBinaryFile(FILE *file) { int rows, cols, i, j, e = 0; float f; DMat D; e += svd_readBinInt(file, &rows); e += svd_readBinInt(file, &cols); if (e) { svd_error("svdLoadDenseBinaryFile: bad file format"); return NULL; } D = svdNewDMat(rows, cols); if (!D) return NULL; for (i = 0; i < rows; i++) for (j = 0; j < cols; j++) { if (svd_readBinFloat(file, &f)) { svd_error("svdLoadDenseBinaryFile: bad file format"); return NULL; } D->value[i][j] = f; } return D; }
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; }