3

実装はそれほど難しくありませんが、可能であればコードを再利用したいと考えています。

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

それで、似たようなものを実装するモジュールを知っていますか?

4

3 に答える 3

3

これは CPAN の単なるギャップかもしれません。ローカル極値モジュールを使用できます。1つを磨き上げて公開することを検討してください!

極大コード (効率ではなく、理解しやすいように意図的に最適化されています):

Perl でのピーク信号検出のヘルプが必要

局所極値について考えるときにいくつかの疑問が生じることに注意してください: エンドポイントを含める必要がありますか? 極値が複数の連続した (等しい) データ ポイントで構成されている場合、最初、最後、またはすべてのインデックスが必要ですか? すべての極値が必要ですか、それとも上位 k のみが必要ですか? 複数の最大値または最小値が近接して発生する場合 (互いに n 以内)、すべてまたは 1 つだけが必要ですか? 優れたモジュールは、ユーザーが望む答えを正確に選択できるようにするものです。

于 2010-10-10T17:35:12.940 に答える
1

私が知っている CPAN モジュールはありませんが、"top X local extrema" に関する良い議論がこのスレッドにあります: http://www.perlmonks.org/?node_id=629742 - the task there is a more hard 「すべての局所最大値」の代わりに「K トップ最大値を見つける」

于 2010-10-10T16:21:10.620 に答える
1

これを行う CPAN モジュールを知りません。ただし、出発点として、ソリューションの構築に役立つList::Util(コア モジュール) とCPAN モジュールを確認してください。List::MoreUtils

例:

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/

于 2010-10-10T16:30:13.437 に答える