Skip to content

Commit 665c4b9

Browse files
authored
Merge pull request #22 from Anonymous5164/master
Added stats.cpp
2 parents afdf07e + a41dd83 commit 665c4b9

2 files changed

Lines changed: 112 additions & 0 deletions

File tree

stats.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#include <cmath>
2+
#include <vector>
3+
#include <algorithm>
4+
#include <unordered_map>
5+
using namespace std;
6+
7+
namespace mlb {
8+
9+
float arrayMean(float arr[], int len) {
10+
float sum = 0.0;
11+
for (int i = 0; i < len; i++) {
12+
sum += arr[i];
13+
}
14+
return sum / len;
15+
}
16+
17+
float arrayMedian(float arr[], int len) {
18+
vector<float> sortedArr(arr, arr + len);
19+
sort(sortedArr.begin(), sortedArr.end());
20+
21+
if (len % 2 == 0) {
22+
float middle1 = sortedArr[len / 2 - 1];
23+
float middle2 = sortedArr[len / 2];
24+
return (middle1 + middle2) / 2.0;
25+
}
26+
else {
27+
return sortedArr[len / 2];
28+
}
29+
}
30+
31+
float arrayMode(float arr[], int len) {
32+
unordered_map<float, int> countMap;
33+
int maxCount = 0;
34+
float mode = 0.0;
35+
36+
for (int i = 0; i < len; i++) {
37+
countMap[arr[i]]++;
38+
if (countMap[arr[i]] > maxCount) {
39+
maxCount = countMap[arr[i]];
40+
mode = arr[i];
41+
}
42+
}
43+
44+
return mode;
45+
}
46+
47+
float normalPDF(float x, float mean, float stddev) {
48+
float exponent = -(pow(x - mean, 2) / (2 * pow(stddev, 2)));
49+
return (1 / (stddev * sqrt(2 * M_PI))) * exp(exponent);
50+
}
51+
52+
float exponentialPDF(float x, float lambda) {
53+
if (x >= 0) {
54+
return lambda * exp(-lambda * x);
55+
}
56+
else {
57+
return 0.0;
58+
}
59+
}
60+
61+
float binomialPMF(int k, int n, float p) {
62+
if (k >= 0 && k <= n) {
63+
float binomialCoefficient = tgamma(n + 1) / (tgamma(k + 1) * tgamma(n - k + 1));
64+
return binomialCoefficient * pow(p, k) * pow(1 - p, n - k);
65+
}
66+
else {
67+
return 0.0;
68+
}
69+
}
70+
}

test/stats.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <iostream>
2+
#include "../stats.cpp"
3+
using namespace std;
4+
5+
6+
int main() {
7+
8+
float arr[] = {1.2, 2.5, 3.1, 4.8, 5.3};
9+
int len = sizeof(arr) / sizeof(arr[0]);
10+
11+
// Test arrayMean
12+
float mean = mlb::arrayMean(arr, len);
13+
cout << "Mean: " << mean << endl;
14+
15+
// Test arrayMedian
16+
float median = mlb::arrayMedian(arr, len);
17+
cout << "Median: " << median << endl;
18+
19+
// Test arrayMode
20+
float mode = mlb::arrayMode(arr, len);
21+
cout << "Mode: " << mode << endl;
22+
23+
// Test normalPDF
24+
float x = 2.0;
25+
float pdf = mlb::normalPDF(x, 0.0, 1.0);
26+
cout << "Normal PDF at x=" << x << ": " << pdf << endl;
27+
28+
// Test exponentialPDF
29+
float lambda = 0.5;
30+
x = 1.0;
31+
float exp_pdf = mlb::exponentialPDF(x, lambda);
32+
cout << "Exponential PDF at x=" << x << ": " << exp_pdf << endl;
33+
34+
// Test binomialPMF
35+
int k = 2;
36+
int n = 5;
37+
float p = 0.3;
38+
float binomial_pmf = mlb::binomialPMF(k, n, p);
39+
cout << "Binomial PMF at k=" << k << ", n=" << n << ", p=" << p << ": " << binomial_pmf << endl;
40+
41+
return 0;
42+
}

0 commit comments

Comments
 (0)