Added scalar math fuctions.

This commit is contained in:
2023-03-18 20:52:26 +01:00
parent b3490d36bf
commit 52d240fa98
2 changed files with 57 additions and 13 deletions

View File

@@ -170,6 +170,58 @@ int tensor_init_rand(tensor t, int dimension, const int *size, int max)
return 1; 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) int tensor_add(tensor t1, const tensor t2)
{ {
assert(!tensor_is_empty(t1)); 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) void tensor_print(const tensor t)
{ {
int i, j; int i, j;

View File

@@ -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_one(tensor t, int dimension, const int *size);
int tensor_init_zero(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_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); int tensor_add(tensor t1, const tensor t2);
void tensor_for_each_elem(tensor t, dtype (*func)(dtype)); void tensor_for_each_elem(tensor t, dtype (*func)(dtype));
int tensor_cpy(tensor t1, const tensor t2);
void tensor_print(const tensor t); void tensor_print(const tensor t);
#endif #endif