Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:通过比较值与数组位置,找到最大值,然后除以最大值_Perl_Multidimensional Array_Max - Fatal编程技术网

Perl:通过比较值与数组位置,找到最大值,然后除以最大值

Perl:通过比较值与数组位置,找到最大值,然后除以最大值,perl,multidimensional-array,max,Perl,Multidimensional Array,Max,我想规范化我的数据。我写了这段代码: my $max1=0; for (my $i=0; $i<=$#data; $i++) { if ($data[$i][1]>$data[$max1][1]) {$max1=$i;} #Disabled# if ($data[$i][1]>$max1) {$max1=$data[$i][1];} } for (my $i=0; $i<=$#data; $i++) { print "$i\t$data[$i][0]\t$d

我想规范化我的数据。我写了这段代码:

my $max1=0;
for (my $i=0; $i<=$#data; $i++) {
  if ($data[$i][1]>$data[$max1][1]) {$max1=$i;}
  #Disabled# if ($data[$i][1]>$max1) {$max1=$data[$i][1];}
}

for (my $i=0; $i<=$#data; $i++) {
  print "$i\t$data[$i][0]\t$data[$i][1]\t$max1\t";
  $data[$i][1] = $data[$i][1] / $data[$max1][1] * 10000;
  #Disabled# $data[$i][1] = $data[$i][1] / $max1 * 10000;
  print "$data[$i][0]\t$data[$i][1]\t$max1\n";
}
my$max1=0;
对于(my$i=0;$i$data[$max1][1]){$max1=$i;}
#禁用#如果($data[$i][1]>$max1){$max1=$data[$i][1];}
}
对于(my$i=0;$i$max1){$max1=$data[$i][1];}
}

对于(my$i=0;$i,原始代码的问题是,在修改数组的过程中,
$i
的值将等于
$max1
。这意味着statemet

$data[$i][1] = $data[$i][1] / $data[$max1][1] * 10000
相当于

$data[$max1][1] = $data[$max1][1] / $data[$max1][1] * 10000
它将
$data[$i][1]
设置为10000。此后,您将执行以下操作

 $data[$i][1] = $data[$i][1] / 10000 * 10000
这使值保持不变

如果需要的话,解决方案是在循环之前将最大值提取到一个单独的变量中,以防止修改

my $maxval =  $data[$i][1]
并将作业更改为

 $data[$i][1] = $data[$i][1] / $maxval * 10000

您的第二次尝试工作正常,因为它确实做到了这一点,在
$max1

中保持因子安全原始代码的问题是,在修改数组的过程中,
$i
的值将等于
$max1
。这意味着statemt

$data[$i][1] = $data[$i][1] / $data[$max1][1] * 10000
相当于

$data[$max1][1] = $data[$max1][1] / $data[$max1][1] * 10000
它将
$data[$i][1]
设置为10000。此后,您将执行以下操作

 $data[$i][1] = $data[$i][1] / 10000 * 10000
这使值保持不变

如果需要的话,解决方案是在循环之前将最大值提取到一个单独的变量中,以防止修改

my $maxval =  $data[$i][1]
并将作业更改为

 $data[$i][1] = $data[$i][1] / $maxval * 10000

您的第二次尝试工作正常,因为它确实做到了这一点,在
$max1

中保持因子安全。我认为我们需要一些样本输入数据和所需输出来告诉您。这看起来……混乱。我认为我们需要一些样本输入数据和所需输出来告诉您。这看起来……混乱。