Comment puis-je obtenir tous les extrema locaux en Perl sans rouler mon propre?

StackOverflow https://stackoverflow.com/questions/3901029

  •  29-09-2019
  •  | 
  •  

Question

Il est pas trop difficile à mettre en œuvre, mais je préférerais la réutilisation du code si possible.

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}]}

Alors, savez-vous d'un module qui implémente quelque chose de semblable?

Était-ce utile?

La solution

Cela peut juste être une lacune dans CPAN; il pourrait utiliser un module extrema local. Pensez à fourbir une et de les publier!

Code de maxima locaux (intentionnellement optimisé pour une clarté, pas d'efficacité):

Besoin d'aide avec détection de signal de crête en Perl

Notez qu'il ya des questions qui devraient survenir lorsque vous pensez à extrema: Si les critères d'évaluation inclus? Si un extremum se compose de plusieurs points de données consécutifs (égaux), voulez-vous l'indice de la première, la dernière, ou tout? Voulez-vous tous extrema ou tout simplement le haut k? Si plusieurs maxima ou minima se produire dans la proximité (dans les n de l'autre), voulez-vous tout ou une seule? Un bon module de rendrait les gens choisir exactement les réponses qu'ils veulent.

Autres conseils

Il n'y a pas de module CPAN Je suis au courant, mais une belle discussion de "top X extrema local" se trouve dans ce fil: http://www.perlmonks.org/?node_id=629742 - la tâche il y a un plus difficile "trouver K top maxima" au lieu de "tous les maxima locaux"

Je ne sais pas de tous les modules CPAN qui font cela. Cependant, pour un point de départ faire vérifier List::Util (module de base) et List::MoreUtils CPAN modules qui devraient vous aider à construire une solution.

Pour exemple:

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

ou

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 /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top