格拉布斯准则剔除数据异常值的c++代码
时间: 2023-09-18 17:14:40 浏览: 121
以下是使用格拉布斯准则剔除数据异常值的C++代码,其中假设数据存储在一个vector<double>中:
```
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
// 计算平均值
double mean(const vector<double>& data) {
double sum = 0;
for (double d : data) {
sum += d;
}
return sum / data.size();
}
// 计算标准差
double stddev(const vector<double>& data) {
double m = mean(data);
double sum = 0;
for (double d : data) {
sum += pow(d - m, 2);
}
double variance = sum / data.size();
return sqrt(variance);
}
// 使用格拉布斯准则剔除数据异常值
vector<double> remove_outliers(vector<double> data) {
vector<double> result;
double m = mean(data);
double s = stddev(data);
double threshold = 1.96 * s; // 根据正态分布的性质,95%的数据在平均值的±1.96倍标准差之间
for (double d : data) {
if (abs(d - m) <= threshold) { // 在范围内的数据保留
result.push_back(d);
}
}
return result;
}
```
使用示例:
```
vector<double> data = {1.0, 2.0, 3.0, 100.0, 4.0, 5.0, 6.0};
vector<double> filtered_data = remove_outliers(data);
for (double d : filtered_data) {
cout << d << " ";
}
// 输出:1 2 3 4 5 6
```
阅读全文