diff --git a/tensor.c b/tensor.c index 899c9d1..234b70b 100644 --- a/tensor.c +++ b/tensor.c @@ -170,6 +170,58 @@ int tensor_init_rand(tensor t, int dimension, const int *size, int max) return 1; } +int tensor_cpy(tensor t1, const tensor t2) +{ + assert(!tensor_is_empty(t2)); + + int i; + if(!_tensor_set_size(t1, t2->size, t2->dimension)) return 0; + for(i = 0; i < t2->num_elem; i++) { + t1->elements[i] = t2->elements[i]; + } + return 1; +} + +void tensor_add_scalar(tensor t, dtype n) +{ + assert(!tensor_is_empty(t)); + + int i; + for(i = 0; i < t->num_elem; i++) { + t->elements[i] += n; + } +} + +void tensor_sub_scalar(tensor t, dtype n) +{ + assert(!tensor_is_empty(t)); + + int i; + for(i = 0; i < t->num_elem; i++) { + t->elements[i] -= n; + } +} + +void tensor_mult_scalar(tensor t, dtype n) +{ + assert(!tensor_is_empty(t)); + + int i; + for(i = 0; i < t->num_elem; i++) { + t->elements[i] *= n; + } +} + +void tensor_div_scalar(tensor t, dtype n) +{ + assert(!tensor_is_empty(t)); + + int i; + for(i = 0; i < t->num_elem; i++) { + t->elements[i] /= n; + } +} + int tensor_add(tensor t1, const tensor t2) { assert(!tensor_is_empty(t1)); @@ -196,18 +248,6 @@ void tensor_for_each_elem(tensor t, dtype (*func)(dtype)) } } -int tensor_cpy(tensor t1, const tensor t2) -{ - assert(!tensor_is_empty(t2)); - - int i; - if(!_tensor_set_size(t1, t2->size, t2->dimension)) return 0; - for(i = 0; i < t2->num_elem; i++) { - t1->elements[i] = t2->elements[i]; - } - return 1; -} - void tensor_print(const tensor t) { int i, j; diff --git a/tensor.h b/tensor.h index 359c523..c53e7e1 100644 --- a/tensor.h +++ b/tensor.h @@ -35,11 +35,15 @@ dtype tensor_get(const tensor t, const int *index, int *success); int tensor_init_one(tensor t, int dimension, const int *size); int tensor_init_zero(tensor t, int dimension, const int *size); int tensor_init_rand(tensor t, int dimension, const int *size, int max); +int tensor_cpy(tensor t1, const tensor t2); +void tensor_add_scalar(tensor t, dtype n); +void tensor_sub_scalar(tensor t, dtype n); +void tensor_mult_scalar(tensor t, dtype n); +void tensor_div_scalar(tensor t, dtype n); int tensor_add(tensor t1, const tensor t2); void tensor_for_each_elem(tensor t, dtype (*func)(dtype)); -int tensor_cpy(tensor t1, const tensor t2); void tensor_print(const tensor t); #endif