From e34123e1055c26d740148cefdb8d1b90208e424e Mon Sep 17 00:00:00 2001 From: Gertjan van den Burg Date: Fri, 14 Oct 2016 18:35:38 +0200 Subject: add sparse matrices to GenSVM and reorganize update functionality --- src/gensvm_init.c | 63 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 13 deletions(-) (limited to 'src/gensvm_init.c') diff --git a/src/gensvm_init.c b/src/gensvm_init.c index aa96ca6..e0f44c1 100644 --- a/src/gensvm_init.c +++ b/src/gensvm_init.c @@ -33,30 +33,67 @@ void gensvm_init_V(struct GenModel *from_model, struct GenModel *to_model, struct GenData *data) { - long i, j, k; + long i, j, k, jj_start, jj_end, jj; double cmin, cmax, value, rnd; + double *col_min = NULL, + *col_max = NULL; long n = data->n; long m = data->m; long K = data->K; if (from_model == NULL) { - for (i=0; iZ, m+1, k, i); - cmin = minimum(cmin, value); - cmax = maximum(cmax, value); + col_min = Calloc(double, m+1); + col_max = Calloc(double, m+1); + for (j=0; jZ == NULL) { + // sparse matrix + int *visit_count = Calloc(int, m+1); + for (i=0; ispZ->ia[i]; + jj_end = data->spZ->ia[i+1]; + for (jj=jj_start; jjspZ->ja[jj]; + value = data->spZ->values[jj]; + + col_min[j] = minimum(col_min[j], value); + col_max[j] = maximum(col_max[j], value); + visit_count[j]++; + } } - for (j=0; jZ, m+1, i, j); + col_min[j] = minimum(col_min[j], value); + col_max[j] = maximum(col_max[j], value); + } + } + } + for (j=0; jV, K-1, i, j, value); + matrix_set(to_model->V, K-1, j, k, value); } } + free(col_min); + free(col_max); } else { for (i=0; i