my $avgRatio = makeRatioAvg ( $ratio_ref ); my $final = makeFinal( $avgRatio ); dd( { avgRatio => $avgRatio }, { final => $final } ); sub makeRatioAvg { print "makeRatioAvg \n"; my( $ratio ) = @_; my $rows = $#$ratio; my $columns = $#{ $ratio->[0] }; my $half_rows = $rows / 2; my $halff = int( 1 + $half_rows ); ## eew my @avg; for my $tre ( 0 .. $columns ) { for my $tri ( 0 .. $columns ) { my $avg = 0; for my $six ( 0 .. $half_rows ) { my $val = $ratio->[$six][$tri][$tre]; $avg += $val; print " + $val "; } $avg = $avg / $halff; print " == $avg \n"; push @avg, $avg; } } for my $tre ( 0 .. $columns ) { for my $tri ( 0 .. $columns ) { my $avg = 0; for my $six ( $halff .. $rows ) { my $val = $ratio->[$six][$tri][$tre]; $avg += $val; print " + $val "; } #~ $avg = $avg / 3; $avg = $avg / $halff; print " == $avg \n"; push @avg, $avg; } } return \@avg; } ## end sub makeRatioAvg sub makeFinal { my( $avgRatio ) = @_; my @first = @{$avgRatio}[ 0 .. ($#$avgRatio/2) ]; my @second = @{$avgRatio}[ (1+($#$avgRatio/2) ) .. $#$avgRatio ]; my @final = map { [ $first[$_] ] , [ $second[$_] ] } 0 .. $#first; return \@final; }