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