forked from 1chipML/1chipML
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstats.h
76 lines (61 loc) · 1.82 KB
/
stats.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#ifndef _STATS_LIB_
#define _STATS_LIB_
#include "linear_congruential_random_generator.h"
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#define STATS_SUCCESS 0
#define STATS_NOT_ENOUGH_POINTS 1
#define STATS_VARIANCE_IS_NULL 2
#ifndef EPISLON
#define EPSILON 0.01
#endif
#ifndef REAL_NUMBER
#define REAL_NUMBER float
#endif
#ifndef MAX_REAL_NUMBER
#define MAX_REAL_NUMBER __FLT_MAX__
#endif
#ifndef MIN_REAL_NUMBER
#define MIN_REAL_NUMBER (-(MAX_REAL_NUMBER)-1)
#endif
#ifndef INTEGER
#define INTEGER unsigned int
#endif
typedef REAL_NUMBER real_number;
typedef INTEGER vec_size;
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
real_number max;
real_number min;
real_number mean;
real_number absAverageDeviation;
real_number standardDeviation;
real_number variance;
real_number skewness;
real_number kurtosis; // The formula for the excess kurtosis was used
} DataSummary;
// Simple analysis of data
real_number maxOfArray(real_number* array, vec_size size);
real_number minOfArray(real_number* array, vec_size size);
real_number mean(real_number* array, vec_size size);
real_number variance(real_number* array, vec_size size);
real_number standardDeviation(real_number* array, vec_size size);
real_number absAverageDeviation(real_number* array, vec_size size);
real_number covariance(real_number* x, real_number* y, vec_size size);
vec_size analyzeData(real_number* array, vec_size size, DataSummary* moments);
// Fitting curves
void simpleLinearRegression(real_number* x, real_number* y, vec_size size,
real_number* a, real_number* b);
// Clustering
void kmeans(real_number* data, vec_size size, vec_size dimensions,
vec_size nbClusters, real_number* centroids,
vec_size* assignations);
#ifdef __cplusplus
}
#endif
#endif