📄 math_utils.cpp
字号:
#include "math_utils.hpp"double mean(double* x, const int& length) { double sum = 0.0; for(int i=0;i<length;i++) if(isnan(x[i])) { return NAN; } else { sum+=x[i]; } return sum/length;}void meanDiff(double *ans, double *x, const int& length) { double x_mean = mean(x,length); for(int i = 0;i < length; i++) { ans[i] = x[i] - x_mean; }}double max(double *vec, const int& length) { double ans = NAN; for(int i = 0; i < length; i++) { if(isnan(vec[i])) { return NAN; } else { // if value is not NA // and we have not initialized ans yet if(isnan(ans)) { ans = vec[i]; } else if(vec[i] > ans) { ans=vec[i]; } } } return ans;}double min(double *vec, const int& length) { double ans = NAN; for(int i = 0; i < length; i++) { if(isnan(vec[i])) { return NAN; } else { // if value is not NA // and we have not initialized ans yet if(isnan(ans)) { ans = vec[i]; } else if(vec[i] < ans) { ans=vec[i]; } } } return ans;}/* rank = 1 is the lowest rank rank = length is the highest*/int rank(double *vec, const int& length) { double currentValue = vec[length - 1]; int ans = 1; for(int i=0;i < (length-1); i++) { if(isnan(currentValue)) return -1; if(currentValue >= vec[i]) ans++; } return ans;}double cor(double *x, double *y, const int& length) { double sd_x = stdev(x,length); double sd_y = stdev(y,length); double cov_xy = cov(x,y,length); return (cov_xy / (sd_x*sd_y));}double cov(double *x, double *y, const int& length) { double xm, ym, sum; xm = mean(x,length); ym = mean(y,length); sum = 0; for(int i = 0; i < length; i++) { sum += (x[i] - xm)*(y[i] - ym); } return sum/(length-1);}double stdev(double *x, const int& length) { double x_mean = mean(x,length); double sum = 0; for(int i = 0; i < length; i++) { sum += pow(x[i] - x_mean,2); } return sqrt(sum/(length-1)); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -