【问题标题】:Normalizing Data Using Javascript使用 Javascript 规范化数据
【发布时间】:2016-12-06 22:52:48
【问题描述】:

我有多个大小为 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);

我做错了什么?谢谢!

【问题讨论】:

  • array[i] 应该可以大于 MIN_VALUE 小于 MAX_VALUE 吧?我是不是误会了什么? @SterlingArcher
  • @gcampbell 这是故意的。有问题吗?
  • @user6645395 不,这不是问题。我删除了我的评论。
  • @user6645395 不,我的眼睛只是在欺骗我。你是对的!

标签: javascript arrays max min


【解决方案1】:

您的代码对我来说很好用。以下示例生成以下规范化数组:

[
  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,就是这样。

【讨论】:

  • 为什么 min 和 max 会包含我原始数组的值?对于我发布的第二个代码块,不要将 min 和 max 重置为新数组的 min 和 max 吗?感谢您的回复。
  • 另外,当我将整个数组记录到控制台时,我得到的值大于 1。
  • 据我所见,在第二个 sn-p 中,您根本不进行任何规范化,您只确定数组的最小值/最大值。能否请您详细说明您的思考过程?
  • 对不起,我没有解释我的意思。我的意思是在前两个循环中,我找到原始数组的最小值和最大值,在第三个循环中,我对数据进行规范化。在最后两个中,我将 max 和 min 重置为希望为 0 和 1 的值,因为我根据规范化数组设置它们。我在说明为什么我不同意以下陈述:“请注意,最小值和最大值不必介于 0 和 1 之间,因为它们代表原始数组的最小值和最大值。”
  • 查看我的编辑。在标准化之后确定minmax 似乎也可以正常工作。如果不是 01,你会得到什么值?
【解决方案2】:

感谢this 的回答,我找到了解决方案!只是因为我没有将它们从字符串转换为浮点数,所以只是在比较这些数字。

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 2014-07-07
    • 2018-09-20
    • 2011-02-21
    • 2011-01-21
    • 2020-06-16
    • 2020-07-31
    • 2020-05-04
    • 2016-07-23
    相关资源
    最近更新 更多