数学建模之数据的标准化处理(C语言)
在此我将主要编译量两种数据的标准化方法。1.极差标准化处理(1)、采用公式很简单,如下:(2)、话不多说,上代码:#include <iostream>#define n 3//实际问题需改动#define m 5//实际问题需改动void max(float a[][n], float b[], float c[]);int main(){FILE* fpr,...
·
在此我将主要编译两种数据的标准化方法。
1.极差标准化处理
(1)、采用公式很简单,如下:
(2)、话不多说,上代码:
#include <iostream>
#define n 3//实际问题需改动
#define m 5//实际问题需改动
void max(float a[][n], float b[], float c[]);
int main()
{
FILE* fpr, * fpw;
fopen_s(&fpr, "1.txt", "r");
fopen_s(&fpw, "2.txt", "w");
float a[m][n], b[n][m], minn[n], maxx[n];
for (int i = 0; i < m; i++)//读取数据
for (int j = 0; j < n; j++)
fscanf_s(fpr, "%f", &a[i][j]);
for (int j = 0; j < n; j++)//针对问题需改动,此示例问题所有数据均为逆指标(取倒数)
for (int i = 0; i < m; i++)
a[i][j] = 1.0 / a[i][j];
max(a, maxx, minn);//求最值
for (int j = 0; j < n; j++)//极差标准化处理
for (int i = 0; i < m; i++)
a[i][j] = (a[i][j] - minn[j]) / (maxx[j] - minn[j]);
for (int j = 0; j < m; j++)//输出结果
{
for (int i = 0; i < n; i++)
fprintf(fpw,"%f ", a[j][i]);
fprintf(fpw, "\n");
}
return 0;
}
void max(float a[][n], float b[], float c[])//求最大及最小值
{
for (int i = 0; i < n; i++)
b[i] = c[i] = a[0][i];
for (int j = 0; j < n; j++)
for (int i = 0; i < m; i++)
{
if (a[i][j] > b[j])
b[j] = a[i][j];
if (a[i][j] < c[j])
c[j] = a[i][j];
}
}
2.z-score 0均值标准化
(1)、公式如下所示(x是原始数据,u是样本均值,σ是样本标准差):
(2)、源代码(emmmmm因为嫌麻烦所以就只写了核心代码):
for (int j = 0; j < n; j++)//求各列之和
for (int i = 0; i < m; i++)
sum += a[i][j];
aver = sum / (n * m);
for (int j = 0; j < n; j++)
for (int i = 0; i < m; i++)
c += abs((a[i][j] - aver) * (a[i][j] - aver) / (n * m));
r = sqrt(c);//标准差求解
for (int j = 0; j < n; j++)//归一化处理(z-score 0均值标准化)
for (int i = 0; i < m; i++)
a[i][j] = (a[i][j]-aver) / r;
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)