使用AWK的最小-最大归一化 [英] Min-Max Normalization using AWK
本文介绍了使用AWK的最小-最大归一化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我不知道为什么我无法遍历所有记录.目前,它用于最后一条记录,并为它打印规范化.
I dont know Why I am unable to loop through all the records. currently it goes for last record and prints the normalization for it.
New_Value =(值-min [i])/(max [i]-min [i])
New_Value = (value - min[i]) / (max[i] - min[i])
{
for(i = 1; i <= NF; i++)
{
if (min[i]==""){ min[i]=$i;} #initialise min
if (max[i]==""){ max[i]=$i;} #initialise max
if ($i<min[i]) { min[i]=$i;} #new min
if ($i>max[i]) { max[i]=$i;} #new max
}
}
END {
for(j = 1; j <= NF; j++)
{
normalized_value[j] = ($j - min[j])/(max[j] - min[j]);
print $j, normalized_value[j];
}
}
数据集
4 14 24 34
3 13 23 33
1 11 21 31
2 12 22 32
5 15 25 35
电流输出
5 1
15 1
25 1
35 1
必需的输出
0.75 0.75 0.75 0.75
0.50 0.50 0.50 0.50
0.00 0.00 0.00 0.00
0.25 0.25 0.25 0.25
1.00 1.00 1.00 1.00
推荐答案
我将处理文件两次,一次确定最小值/最大值,一次计算归一化值:
I would process the file twice, once to determine the minima/maxima, once to calculate the normalized values:
awk '
NR==1 {
for (i=1; i<=NF; i++) {
min[i]=$i
max[i]=$i
}
next
}
NR==FNR {
for (i=1; i<=NF; i++) {
if ($i < min[i]) {min[i]=$i}
else if ($i > max[i]) {max[i]=$i}
}
next
}
{
for (i=1; i<=NF; i++) printf "%.2f%s", ($i-min[i])/(max[i]-min[i]), FS
print ""
}
' file file
# ^^^^ ^^^^ same file twice!
输出
0.75 0.75 0.75 0.75
0.50 0.50 0.50 0.50
0.00 0.00 0.00 0.00
0.25 0.25 0.25 0.25
1.00 1.00 1.00 1.00
这篇关于使用AWK的最小-最大归一化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文