2

私は、データセット間で同様のパターンが現れる頻度と近さを報告できるアルゴリズムを開発しようとしています。

簡単な例:

set1 = [0, 1, 0, 0, 2, 0, 0, 3, 0]
set2 = [1, 2, 3, 0, 0, 0, 0, 0, 0]
set3 = [0, 0, 0, 0, 0, 1, 2, 0, 3]

これらの各セットには1、2、および3がありますが、これらの番号はset2とset3で近接しています。

リスト内包表記でこのタスクを実行できると思います。データを変数xとyに描画し、各一致をリストのリストにカタログ化できます。ここで、埋め込まれたリストの1つの1番目の要素は見つかった一致の文字列であり、2番目と3番目の要素はそれらの位置です。そして、このリストを別の関数で実行して、それらの一致が発生する頻度と近さを計算し、パーセンテージを報告することができます。

それとも、これを行うためのよりエレガントな方法がありますか?

私はまだHaskellの初心者です。何かアドバイスをいただければ幸いです。

4

1 に答える 1

3

OK 、順番にそのセットに 1、2、3 がある場合、近接を計算する式は prox = indexOf 3 - indexOf 1 - 2 になります。つまり、prox は 1..2 と 2 の間のゼロの合計です。 2..3. Haskell で書くことができます:

prox :: [Integer] -> Int
prox s = i3 - i1 - 2
  where
    Just i3 = findIndex (==3) s
    Just i1 = findIndex (==1) s

1 が最初で 3 が最後であると仮定せずに、一般化することができます。

于 2012-05-05T08:30:12.300 に答える