与目标数字数组的接近度得分
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
低分者获胜!
很难知道在 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
33 77 300 110 260 410 60 99 23
100 250 400 60 --> RMS score = 178
100 250 400 60 --> RMS score = 8.7
低分者获胜!