使用Javascript规范化数据

时间:2016-08-01 18:44:32

标签: javascript arrays max min

我有多个大小为262144的数组,我试图使用以下代码将每个数组的所有值设置为0到1之间(包括0和1)。需要明确的是,每个数组都会有不同的规范化,因为每个数组都有不同的值。

var i;
var max = Number.MIN_VALUE;
var min = Number.MAX_VALUE;
for (i = 0; i < array.length; i++) {
    if(array[i]>max) {
        max = array[i];
    }
}

for (i = 0; i < array.length; i++){
    if(array[i]<min) {
        min = array[i];
    }
}

for (i = 0; i < array.length; i++) {
    var norm = (array[i]-min)/(max-min);
    array[i] = norm;
}

但是,我知道它没有正确执行此操作,因为当我执行以下代码时,记录到控制台的数字通常高于1.

max = Number.MIN_VALUE;
min = Number.MAX_VALUE;
for (i = 0; i < array.length; i++) {
    if(array[i]>max) {
        max = array[i];
    }
}

for (i = 0; i < array.length; i++) {
    if(array[i]<min) {
        min = array[i];
    }
}

console.log(max);
console.log(min);

我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:0)

您的代码适用于我。以下示例生成以下规范化数组:

[
  0,
  0.821917808219178,
  0.0684931506849315,
  0.3835616438356164,
  1
]

请注意,minmax不必介于01之间,因为它们代表原始数组的最小值和最大值

var array = [4, 64, 9, 32, 77];

var i;
var max = Number.MIN_VALUE;
var min = Number.MAX_VALUE;
for (i = 0; i < array.length; i++)
{
   if(array[i]>max)
   {
       max = array[i];
   }
}

for (i = 0; i < array.length; i++)
{
   if(array[i]<min)
   {
       min = array[i];
   }
}

for (i = 0; i < array.length; i++)
{
   var norm = (array[i]-min)/(max-min);
   array[i] = norm;
}

max = Number.MIN_VALUE;
min = Number.MAX_VALUE;
for (i = 0; i < array.length; i++) {
    if(array[i]>max) {
        max = array[i];
    }
}

for (i = 0; i < array.length; i++) {
    if(array[i]<min) {
        min = array[i];
    }
}

console.log(array);

console.log(max); // 1
console.log(min); // 0

修改 正如您在示例中看到的那样,规范化后的minmax值应该是01,就是这种情况。

答案 1 :(得分:0)

由于this回答,我找到了解决方案!只是数字被比较,因为我没有将它们从字符串转换为浮点数。