| | |
| | | |
| | | #include "utils.h" |
| | | |
| | | void sorta_shuffle(void *arr, size_t n, size_t size, size_t sections) |
| | | { |
| | | size_t i; |
| | | for(i = 0; i < sections; ++i){ |
| | | size_t start = n*i/sections; |
| | | size_t end = n*(i+1)/sections; |
| | | size_t num = end-start; |
| | | shuffle(arr+(start*size), num, size); |
| | | } |
| | | } |
| | | |
| | | void shuffle(void *arr, size_t n, size_t size) |
| | | { |
| | | size_t i; |
| | | void *swp = calloc(1, size); |
| | | for(i = 0; i < n-1; ++i){ |
| | | size_t j = i + rand()/(RAND_MAX / (n-i)+1); |
| | | memcpy(swp, arr+(j*size), size); |
| | | memcpy(arr+(j*size), arr+(i*size), size); |
| | | memcpy(arr+(i*size), swp, size); |
| | | } |
| | | } |
| | | |
| | | void del_arg(int argc, char **argv, int index) |
| | | { |
| | | int i; |
| | |
| | | s[len-offset] = '\0'; |
| | | } |
| | | |
| | | void free_ptrs(void **ptrs, int n) |
| | | { |
| | | int i; |
| | | for(i = 0; i < n; ++i) free(ptrs[i]); |
| | | free(ptrs); |
| | | } |
| | | |
| | | char *fgetl(FILE *fp) |
| | | { |
| | | if(feof(fp)) return 0; |
| | |
| | | return sum_array(a,n)/n; |
| | | } |
| | | |
| | | void mean_arrays(float **a, int n, int els, float *avg) |
| | | { |
| | | int i; |
| | | int j; |
| | | memset(avg, 0, els*sizeof(float)); |
| | | for(j = 0; j < n; ++j){ |
| | | for(i = 0; i < els; ++i){ |
| | | avg[i] += a[j][i]; |
| | | } |
| | | } |
| | | for(i = 0; i < els; ++i){ |
| | | avg[i] /= n; |
| | | } |
| | | } |
| | | |
| | | float variance_array(float *a, int n) |
| | | { |
| | | int i; |