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; }
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; }
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; }
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; }
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; }