获取数组数组的平均值不正确

时间:2015-09-28 14:15:41

标签: perl

我有一个相当愚蠢的问题。

输入数据:

    No:20   2.23    5.5   101   404   26.3
    No:01   2.40    5.3   100   404   25.7
    No:02   2.30    5.6   100   405   25.4
    No:03   2.39    5.3   100   404   25.5

    No:07   2.61    4.9   100   404   25.4
    No:08   2.53   
    No:09   2.41    5.4   101   404   25.4
    No:10   2.59    5.  100   404   25.4
    No:11   2.55    5.4   101   404   25.3
    No:12   2.3    5.3   100   404   25.5
    No:13   2.47    5.2   100   404   25.
    No:14   2.25    5.1   100   404   25.6
    No:15   2.24    5.1   100   404   25.7

    No:17   2.57    5.0   100   404   25.5
    No:18   2.45    5.2   101   404   25.5
    No:04   2.51    5.5   100   404   25.4
    No:05   2.38    5.1   101   405   25.5No:04   2.51    5.5   100   404   25.4
    No:06   2.29    5.1   100   405   25.3
    No:07   2.53    4.9   100   404   25.4
    No:08   2.41    5.2   100   404   25.5
    No:07   2.46    4.9   100   404   27.6
    No:05   2.23    5.1   100   404   25.0��
    o:09   2.39    5.3   100   404   26.4
    No:01   2.49    5.3   101   404   26.8
    No:02   2.21    5.5   101   404   26.2

______________________________________以及更多

我希望平均线元素的每一百个结束。

#!usr/bin/perl
use utf8;
while(<>){
    if(/^No:\d{2}\s{3}     \d\.\d{2}s{4}    \d\.\d\s{3}    \d{3}s{3}    \d{3}s{3}    \d{2}\.\d\s$/x){
        chomp;
        push @Array,[split/\s+/];
    }
}

foreach (0..$#Array/100){
    my $average=0;
    $average += $Array[$_][5]/100   foreach($_..$_+100);
    print "this is   $average \n";
}

输出(平均值)

23.836
26.5630000000001
26.462
26.462
26.361
26.462
26.5630000000001
29.694
26.664
26.967

**使用MS Excel **

25.9530
25.4850
25.7610
25.3160
25.1650
25.7060
25.9500
25.6800
25.4720
25.4820

1 个答案:

答案 0 :(得分:0)

您正在错误地查看数据。在你的第一次传球你看0-99的值,然后在第二次传球你看1-100,然后2-101,等等。听起来你想做0-99然后100-199等等你可以做类似的事情:

my $chunks = $#Array / 100;

foreach my $chunk (0 .. $chunks) {
    my $low = 100 * $chunk;
    my $high = $low + 100;
    $high = $#Array if $high > $#Array;
    my $sum = 0;
    foreach my $n ($low .. $high) {
         $sum += $Array[$n][5];
    }
    my $avg = $sum/($high - $low);
    print "avg=$avg\n";
}