私はPerlに比較的慣れていないので、比較的高度な行列計算を行う必要があり、使用するデータ構造がわかりません。
これがこれに適したフォーラムであるかどうかはわかりませんが、Perlの多次元配列に次の行列があるとします。
0.2 0.7 0.2
0.6 0.8 0.7
0.6 0.1 0.8
0.1 0.2 0.9
0.6 0.3 0.0
0.6 0.9 0.2
このマトリックスで、特定のしきい値( 0.5など)よりも高い連続値に対応する列セグメントを特定しようとしています。
たとえば、このマトリックスをしきい値設定すると、次のようになります。
0 1 0
1 1 1
1 0 1
0 0 1
1 0 0
1 1 0
ここで最初の列に焦点を当てると、次のようになります。
0
1
1
0
1
1
2つの連続したセグメントがあることがわかります。
0 1 1 0 1 1
- 最初のトラック(1つのシーケンス)はインデックス1で始まり、インデックス2で終わります。
- 2番目のトラック(1つのシーケンス)は、インデックス4で始まり、インデックス5で終わります。
元のマトリックスでそのようなトラックをすべて検出したいのですが、どのように進めるか、またはどのPerlデータ構造がこれに最も適しているかわかりません。
理想的には、インデックス付けが簡単なものが必要です。たとえば、変数を使用すると仮定するとtracks
、最初の列(インデックス0)のインデックスを次のように格納できます。
# First column, first track
$tracks{0}{0}{'start'} = 1;
$tracks{0}{0}{'end'} = 2;
# First column, second track
$tracks{0}{1}{'start'} = 4;
$tracks{0}{1}{'end'} = 5;
# ...
Perlでこの問題に取り組むために使用できる優れたデータ構造やライブラリは何ですか?