2016-05-21 47 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 –