in reply to Re^4: Any idea for predicting the peak points in the graph by perl
in thread Any idea for predicting the peak points in the graph by perl
use strict; my $input_file = 'foobar.txt'; open my $in, $input_file or die "Failed to read $input_file: $!\n"; my @max = do { local $_ = <$in>; chomp; [ split ] }; my $last = $max[ 0 ][ 1 ]; while ( <$in> ) { chomp; my ( $x, $y ) = split; if ( $y > $last ) { $max[ -1 ] = [ $x, $y ]; } elsif ( $max[ -1 ] ) { $max[ @max ] = undef; } $last = $y; } close $in; pop @max unless $max[ -1 ]; print "Maxima:\n"; print "($_->[ 0 ], $_->[ 1 ])\n" for @max;
For data that is not x-ordered, use the following:
use strict; my $input_file = 'foobar.txt'; open my $in, $input_file or die "Failed to read $input_file: $!\n"; my @data; while (<$in>) { chomp; push @data, [ split ]; } close $in; @data = sort { $a->[ 0 ] <=> $b->[ 0 ] } @data; my @max = $data[ 0 ]; my $last = $max[ 0 ][ 1 ]; for ( 1 .. $#data ) { my ( $x, $y ) = @{ $data[ $_ ] }; if ( $y > $last ) { $max[ -1 ] = [ $x, $y ]; } elsif ( $max[ -1 ] ) { $max[ @max ] = undef; } $last = $y; } pop @max unless $max[ -1 ]; print "Maxima:\n"; print "($_->[ 0 ], $_->[ 1 ])\n" for @max;
Update: fixed missing my before $in
the lowliest monk
|
|---|