2016-05-21 76 views
0

我正在嘗試創建一個程序,該程序將對一堆數組進行評分,以查找與給定數組最接近的數組。所以說,給定的數組是匹配2個數組的值

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

和陣列來比較的一個是

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

我如何能在第一陣列中的值匹配其關閉值第二陣列將在給它最低的總差。 在這種情況下,目前還不清楚

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

比281應該匹配310,因爲它比256更接近然而,這將迫使301匹配到256所以最佳的整體匹配將

281=>256 and 301=> 310

然後程序會簡單地做

abs(-6 - 1) + abs(78-80)等所有比賽計算等級。並具有最低等級的陣列是最好的搭配

*******注意*******

給定的數組會比匹配數組大小相同或更小,將只有積極的價值。匹配數組可以具有負值。 我在考慮使用餘弦相似度,但我不確定如何實現這個問題。

+0

您可以計算數組之間的距離來確定相似度。數據中是否有噪音?數據是線性的嗎? –

+0

沒有值應該被忽略(噪聲),並且數組將被排序爲線性。你如何計算距離? –

回答

0

通常計算出的距離更準確。有different approaches有優點和缺點。在你的例子中,你計算的總和爲one dimension euclidean distances。但是還有更多的擴展比較,如dynamic time warping。這是一種算法,它找出兩個「陣列」之間的最佳對齊並計算最佳距離。

您可以安裝和使用this包。 Here你可以看到一個視覺例子。 DTW的另一個優點是,數組的長度不必匹配。

+0

我想在紅寶石中寫這段代碼,是否有一個紅寶石寶石可以給出DTW計算 –

+0

對不起,我沒有認識到編程語言。 (詳細地使用'array'而不是'list'這個詞。)無論如何,我發現這個rubygem:https://rubygems.org/gems/dtw –