-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathstats.cpp
70 lines (60 loc) · 1.76 KB
/
stats.cpp
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
#include <cmath>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
namespace mlb {
float arrayMean(float arr[], int len) {
float sum = 0.0;
for (int i = 0; i < len; i++) {
sum += arr[i];
}
return sum / len;
}
float arrayMedian(float arr[], int len) {
vector<float> sortedArr(arr, arr + len);
sort(sortedArr.begin(), sortedArr.end());
if (len % 2 == 0) {
float middle1 = sortedArr[len / 2 - 1];
float middle2 = sortedArr[len / 2];
return (middle1 + middle2) / 2.0;
}
else {
return sortedArr[len / 2];
}
}
float arrayMode(float arr[], int len) {
unordered_map<float, int> countMap;
int maxCount = 0;
float mode = 0.0;
for (int i = 0; i < len; i++) {
countMap[arr[i]]++;
if (countMap[arr[i]] > maxCount) {
maxCount = countMap[arr[i]];
mode = arr[i];
}
}
return mode;
}
float normalPDF(float x, float mean, float stddev) {
float exponent = -(pow(x - mean, 2) / (2 * pow(stddev, 2)));
return (1 / (stddev * sqrt(2 * M_PI))) * exp(exponent);
}
float exponentialPDF(float x, float lambda) {
if (x >= 0) {
return lambda * exp(-lambda * x);
}
else {
return 0.0;
}
}
float binomialPMF(int k, int n, float p) {
if (k >= 0 && k <= n) {
float binomialCoefficient = tgamma(n + 1) / (tgamma(k + 1) * tgamma(n - k + 1));
return binomialCoefficient * pow(p, k) * pow(1 - p, n - k);
}
else {
return 0.0;
}
}
}