c++求一维数组标准差
最近写的一段c++算法中需要计算标准差,于是就造了个轮子,顺便记录下来...

看公式,可以推断出计算标准差分为几步:
- 计算平均值u=(x1+x2+...+xn)/n
- 计算方差s²=((x1-u)^2 +(x2-u)^2 +...+(xn-u)^2)/n
- 计算标准差σ=sqrt(s²)
1 2 3 4 5 6 7 8 9 10 11 |
/** * 求平均值 */ double average(double *x, int len) { double sum = 0; for (int i = 0; i < len; i++) // 求和 sum += x[i]; return sum/len; // 得到平均值 } |
1 2 3 4 5 6 7 8 9 10 11 |
/** * 求方差 */ double variance(double *x, int len) { double average = average(x, len); for (int i = 0; i < len; i++) // 求和 sum += pow(x[i] - average, 2); return sum/len; // 得到平均值 } |
1 2 3 4 5 6 7 8 9 |
/** * 求标准差 */ double average(double *x, int len) { double variance = variance(x, len); return sqrt(variance); // 得到标准差 } |
最后,注意double *x在使用后的释放问题,遵循"谁申请谁释放"(new[]/delete[])原则
1 2 3 4 5 |
if(NULL != x) { delete[] x; x = NULL; } |