与目标数字数组的接近度得分

Closeness score to a target array of numbers

很难知道在 Whosebug 上搜索什么术语来解决这个问题。假设您有一个目标数组,例如 [100, 250, 400, 60]

我希望能够根据阈值/误差线(例如 10)对其他阵列与该目标的接近程度进行评分。因此,例如,阵列: [90, 240, 390, 50] 会因为误差条而获得高分(或肯定的匹配结果)。

顺序很重要,所以 [60, 400, 250, 100] 会得到零分(或负匹配结果)

数组的大小可以不同,因此 [33, 77, 300, 110, 260, 410, 60, 99, 23] 会得到好的分数或肯定的匹配结果。

思考这个问题的一个好方法是将这些数字想象成 C、G、E、F 等音符的频率,我正在尝试将一系列音符与目标相匹配。

正在搜索 Whosebug 我不确定这个 post 是否有效,但很接近: Compare difference between multiple numbers

2015 年 1 月 17 日更新: 我没有提到可能影响当前答案的场景。如果数组在这些目标数字之间有噪声,我仍然想找到一个正匹配。例如 [33, 77, 300, 110, 260, 300, 410, 40, 60, 99, 23].

我相信你要找的是序列相似度

您可以在 this wikipedia page 上阅读有关它们的信息。您的案例似乎适合本地对齐类别。您可以选择一些算法:

但是,由于这些算法比较的是字符串,因此在插入、删除或比较数字时,您必须设计自己的评分规则。

听起来您要查找的是 RMS 误差,其中 RMS 是 Root 的平方 Mean S平方误差。让我举例说明。假设目标数组为
[100, 250, 400, 60],待评分数组为[104, 240, 410, 55]

首先计算差值,即误差

 100    250    400    60
-104   -240   -410   -55
----   ----   ----   ---
  -4     10    -10     5

然后对误差进行平方得到16 100 100 25。计算误差平方的平均值

(16 + 100 + 100 + 25) / 4 = 60.25

最后,取平方根 sqrt(60.25) = 7.76

当数组大小不同时,如果第一个值在某个阈值内(例如 +- 30),您可以通过仅计算 RMS 误差来加快速度。使用示例 [33, 77, 300, 110, 260, 410, 60, 99, 23],只会是要检查的两个对齐方式,因为与其他对齐方式相比,第一个数字与 100

相差超过 30
33  77 300 110 260 410  60  99  23
   100 250 400  60                  --> RMS score = 178
           100 250 400  60          --> RMS score = 8.7

低分者获胜!