2016-05-21 44 views
0

配列の束を評価し、与えられた配列に最も近いものを見つけるプログラムを作成しようとしています。だから、与えられた配列は、と比較するために2つの配列の値を一致させる

[1, 80, 120, 155, 281, 301] 

そしてアレイのうちの1つであると言うことは、私はその意志二番目の配列におけるその閉じ値に最初の配列の値を一致させることができますどのように

[-6, 78, 108, 121, 157, 182, 218, 256, 310, 408, 410] 

ですそれに最も低い差を与えます。しかし、これはそう最良の全体的一致が

281=>256 and 301=> 310あろう256に一致させるために301を強制する256よりも近いので、場合 これは281より

1 => -6, 80 => 78, 120 => 121, 155 => 157

不明であるが310まで一致している必要があります

次に、プログラムは、単純にすべての一致のために

abs(-6 - 1) + abs(78-80)などを行うことで評価を計算します。そして最低の格付けを持つ配列は、指定された配列が同じサイズか、整合アレイと意志よりも小さくなりますベストマッチ

******* *******注

です正の値のみを持ちます。一致する配列は負の値を持つことができます。 私は余弦の類似性を使用することを考えていましたが、私はこの問題のためにそれを実装する方法がわかりません。

+0

配列間の距離を計算して類似性を判断することができます。データにノイズがありますか?データは直線的ですか? –

+0

無視する必要がある値(ノイズ)はなく、配列は線形にソートされます。どのように距離を計算するのですか? –

答えて

0

一般に、計算された距離はより正確です。長所と短所があるdifferent approachesがあります。あなたの例では、one dimension euclidean distancesの合計を計算します。しかし、dynamic time warpingのような拡張比較があります。これは2つの '配列'間の最適な配列を見つけ出し、最適な距離を計算するアルゴリズムです。

thisパッケージをインストールして使用できます。 Hereあなたは視覚的な例を見ることができます。 DTWのもう1つの利点は、アレイの長さを一致させる必要がないことです。

+0

Rubyでこのコードを書こうとしていますが、DTW計算を行うルビーの宝石があります。 –

+0

申し訳ありませんが、私はプログラミング言語を認識しませんでした。 (詳しくは、 'list'の代わりに' array'という単語を使います。)とにかく私はこのrubygemを見つけました:https://rubygems.org/gems/dtw –

関連する問題