实施并不难,但是如果可能的话,我希望代码重复使用。

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

那么,您知道是否有实现类似内容的模块?

有帮助吗?

解决方案

这可能只是CPAN的差距。它可以使用当地的极端模块。考虑抛光一个并发布它!

本地最大密码(故意优化以理解性,而不是效率):

需要在Perl中检测峰值信号的帮助

请注意,当您考虑当地极端情况时,应该出现一些问题:应该包括终点吗?如果极值由几个连续的(平等)数据点组成,则您是否想要第一个,最后一个或全部的索引?您想要全部极端还是顶部K?如果多个最大值或最小值近距离发生(彼此之间),您是否想要全部或仅一个?一个好的模块会让人们准确选择他们想要的答案。

其他提示

我知道没有CPAN模块,但是在此线程中可以找到对“顶级X Local Extreara”的很好的讨论: http://www.perlmonks.org/?node_id=629742 - 任务更困难的“查找k top maxima”,而不是“所有本地最大值”

我不知道有任何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/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top