Как я могу получить все локальные экстремумы в Perl, не катя свои собственные? - PullRequest
3 голосов
/ 10 октября 2010

Это не так сложно реализовать, но я бы предпочел повторное использование кода, если это возможно.

my @arr = (2,3,4,5,5,5,4,4,3,1,1,2,3,0,2,4);
my $ret = {MAXIMA=>[{INDEX=>3, VAL=>5},{INDEX=>4, VAL=>5},{INDEX=>5, VAL=>5}],
           MINIMA=>[{INDEX=>9, VAL=>1},{INDEX=>10, VAL=>1},{INDEX=>13, VAL=>0}]}

Итак, вы знаете какой-нибудь модуль, который реализует нечто подобное?

Ответы [ 3 ]

3 голосов
/ 10 октября 2010

Это может быть просто пробел в CPAN;он может использовать локальный модуль экстремумов.Подумайте о том, чтобы откорректировать один и опубликовать его!

Код локальных максимумов (намеренно оптимизирован для понятности, а не эффективности):

Нужна помощь с обнаружением пикового сигнала в Perl

Обратите внимание, что при рассмотрении локальных экстремумов могут возникнуть некоторые вопросы: следует ли включать конечные точки?Если экстремум состоит из нескольких последовательных (равных) точек данных, хотите ли вы индекс первой, последней или всех?Вы хотите, чтобы все экстремумы или только верх K?Если несколько максимумов или минимумов происходят в непосредственной близости (в пределах n друг от друга), хотите ли вы все или только один?Хороший модуль заставит людей выбирать именно те ответы, которые они хотят.

1 голос
/ 10 октября 2010

Я не знаю ни одного модуля CPAN, который делает это. Однако в качестве отправной точки следует проверить List::Util (основной модуль) и List::MoreUtils CPAN-модули, которые должны помочь вам в создании решения.

Например:

use List::Util qw/min max/;
my $min = min @arr;
my $max = max @arr;

или

use List::MoreUtils ':all';
my ($min, $max) = minmax @arr;

# and then... 
my @maxima_indexes = indexes { $_ == $max } @arr;

# global maxima...
my @maxima = map { {INDEX => $_, VAL => $max} } @maxima_indexes;

/ I3az /

1 голос
/ 10 октября 2010

Нет модуля CPAN, о котором я знаю, но хорошее обсуждение "top X local extrema" можно найти в этой теме: http://www.perlmonks.org/?node_id=629742 - задача там более трудная "найти K top maxima "вместо" всех локальных максимумов "

...