-
Notifications
You must be signed in to change notification settings - Fork 6
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #22 from Anonymous5164/master
Added stats.cpp
- Loading branch information
Showing
2 changed files
with
112 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,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; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
#include <iostream> | ||
#include "../stats.cpp" | ||
using namespace std; | ||
|
||
|
||
int main() { | ||
|
||
float arr[] = {1.2, 2.5, 3.1, 4.8, 5.3}; | ||
int len = sizeof(arr) / sizeof(arr[0]); | ||
|
||
// Test arrayMean | ||
float mean = mlb::arrayMean(arr, len); | ||
cout << "Mean: " << mean << endl; | ||
|
||
// Test arrayMedian | ||
float median = mlb::arrayMedian(arr, len); | ||
cout << "Median: " << median << endl; | ||
|
||
// Test arrayMode | ||
float mode = mlb::arrayMode(arr, len); | ||
cout << "Mode: " << mode << endl; | ||
|
||
// Test normalPDF | ||
float x = 2.0; | ||
float pdf = mlb::normalPDF(x, 0.0, 1.0); | ||
cout << "Normal PDF at x=" << x << ": " << pdf << endl; | ||
|
||
// Test exponentialPDF | ||
float lambda = 0.5; | ||
x = 1.0; | ||
float exp_pdf = mlb::exponentialPDF(x, lambda); | ||
cout << "Exponential PDF at x=" << x << ": " << exp_pdf << endl; | ||
|
||
// Test binomialPMF | ||
int k = 2; | ||
int n = 5; | ||
float p = 0.3; | ||
float binomial_pmf = mlb::binomialPMF(k, n, p); | ||
cout << "Binomial PMF at k=" << k << ", n=" << n << ", p=" << p << ": " << binomial_pmf << endl; | ||
|
||
return 0; | ||
} |