aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2014-07-31 21:36:53 +0200
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2014-07-31 21:36:53 +0200
commita0e00c7b6f77aab92d08772ca1a343d4ee6195b2 (patch)
treec13f16c3beb5164600bfd4378752c753a322ec76
parentremove fixed seed leftover from merge (diff)
downloadgensvm-a0e00c7b6f77aab92d08772ca1a343d4ee6195b2.tar.gz
gensvm-a0e00c7b6f77aab92d08772ca1a343d4ee6195b2.zip
unroll some matrix functions for safety with macros
-rw-r--r--src/crossval.c18
-rw-r--r--src/libMSVMMaj.c5
-rw-r--r--src/msvmmaj_train.c28
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);
}
}
}