diff options
| author | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2014-07-31 21:36:53 +0200 |
|---|---|---|
| committer | Gertjan van den Burg <gertjanvandenburg@gmail.com> | 2014-07-31 21:36:53 +0200 |
| commit | a0e00c7b6f77aab92d08772ca1a343d4ee6195b2 (patch) | |
| tree | c13f16c3beb5164600bfd4378752c753a322ec76 /src | |
| parent | remove fixed seed leftover from merge (diff) | |
| download | gensvm-a0e00c7b6f77aab92d08772ca1a343d4ee6195b2.tar.gz gensvm-a0e00c7b6f77aab92d08772ca1a343d4ee6195b2.zip | |
unroll some matrix functions for safety with macros
Diffstat (limited to 'src')
| -rw-r--r-- | src/crossval.c | 18 | ||||
| -rw-r--r-- | src/libMSVMMaj.c | 5 | ||||
| -rw-r--r-- | src/msvmmaj_train.c | 28 |
3 files changed, 24 insertions, 27 deletions
diff --git a/src/crossval.c b/src/crossval.c index cbbad96..1b5a592 100644 --- a/src/crossval.c +++ b/src/crossval.c @@ -95,6 +95,8 @@ void msvmmaj_get_tt_split(struct MajData *full_data, struct MajData *train_data, long m = full_data->m; long K = full_data->K; + double value; + test_n = 0; for (i=0; i<n; i++) if (cv_idx[i] == fold_idx) @@ -121,17 +123,17 @@ void msvmmaj_get_tt_split(struct MajData *full_data, struct MajData *train_data, for (i=0; i<n; i++) { if (cv_idx[i] == fold_idx) { test_data->y[k] = full_data->y[i]; - for (j=0; j<m+1; j++) - matrix_set(test_data->RAW, m+1, k, j, - matrix_get(full_data->RAW, m+1, - i, j)); + for (j=0; j<m+1; j++) { + value = matrix_get(full_data->RAW, m+1, i, j); + matrix_set(test_data->RAW, m+1, k, j, value); + } k++; } else { train_data->y[l] = full_data->y[i]; - for (j=0; j<m+1; j++) - matrix_set(train_data->RAW, m+1, l, j, - matrix_get(full_data->RAW, m+1, - i, j)); + for (j=0; j<m+1; j++) { + value = matrix_get(full_data->RAW, m+1, i, j); + matrix_set(train_data->RAW, m+1, l, j, value); + } l++; } } diff --git a/src/libMSVMMaj.c b/src/libMSVMMaj.c index 488b76d..df422c0 100644 --- a/src/libMSVMMaj.c +++ b/src/libMSVMMaj.c @@ -265,6 +265,7 @@ void msvmmaj_seed_model_V(struct MajModel *from_model, void msvmmaj_step_doubling(struct MajModel *model) { long i, j; + double value; long m = model->m; long K = model->K; @@ -272,8 +273,8 @@ void msvmmaj_step_doubling(struct MajModel *model) for (i=0; i<m+1; i++) { for (j=0; j<K-1; j++) { matrix_mul(model->V, K-1, i, j, 2.0); - matrix_add(model->V, K-1, i, j, - -matrix_get(model->Vbar, K-1, i, j)); + value = - matrix_get(model->Vbar, K-1, i, j); + matrix_add(model->V, K-1, i, j, value); } } } diff --git a/src/msvmmaj_train.c b/src/msvmmaj_train.c index 71a24df..09b00ee 100644 --- a/src/msvmmaj_train.c +++ b/src/msvmmaj_train.c @@ -46,7 +46,7 @@ void msvmmaj_optimize(struct MajModel *model, struct MajData *data) { long i, j, it = 0; - double L, Lbar; + double L, Lbar, value; long n = model->n; long m = model->m; @@ -105,10 +105,12 @@ void msvmmaj_optimize(struct MajModel *model, struct MajData *data) for (i=0; i<K-1; i++) model->t[i] = matrix_get(model->V, K-1, 0, i); - for (i=1; i<m+1; i++) - for (j=0; j<K-1; j++) - matrix_set(model->W, K-1, i-1, j, - matrix_get(model->V, K-1, i, j)); + for (i=1; i<m+1; i++) { + for (j=0; j<K-1; j++) { + value = matrix_get(model->V, K-1, i, j); + matrix_set(model->W, K-1, i-1, j, value); + } + } free(B); free(ZV); free(ZAZ); @@ -523,18 +525,10 @@ void msvmmaj_get_update(struct MajModel *model, struct MajData *data, double *B, for (i=0; i<m+1; i++) { for (j=0; j<K-1; j++) { - matrix_set( - model->Vbar, - K-1, - i, - j, - matrix_get(model->V, K-1, i, j)); - matrix_set( - model->V, - K-1, - i, - j, - matrix_get(ZAZV, K-1, i, j)); + value = matrix_get(model->V, K-1, i, j); + matrix_set(model->Vbar, K-1, i, j, value); + value = matrix_get(ZAZV, K-1, i, j); + matrix_set(model->V, K-1, i, j, value); } } } |
