Math 如何计算数字的相似性(列表中)

Math 如何计算数字的相似性(列表中),math,similarity,Math,Similarity,我正在寻找一种计算数字列表相似性分数的方法。理想情况下,该方法应在固定范围内给出结果。例如,从0到1,其中0根本不相似,1表示所有数字都相同 为了清楚起见,让我举几个例子: 0 1 2 3 4 5 6 7 8 9 10 => the similarity should be 0 or close to zero as all numbers are different 1 1 1 1 1 1 1 => 1 10 9 11 10.5 => close to 1 1 1 1 1 1

我正在寻找一种计算数字列表相似性分数的方法。理想情况下,该方法应在固定范围内给出结果。例如,从0到1,其中0根本不相似,1表示所有数字都相同

为了清楚起见,让我举几个例子:

0 1 2 3 4 5 6 7 8 9 10 => the similarity should be 0 or close to zero as all numbers are different
1 1 1 1 1 1 1 => 1
10 9 11 10.5 => close to 1
1 1 1 1 1 1 1 1 1 1 100 => score should be still pretty high as only the last value is different
我曾尝试根据标准化和平均值来计算相似度,但当有一个“坏数字”时,这会给我带来非常糟糕的结果


谢谢。

相似性测试总是非常主观,正确的测试方法很大程度上取决于你想用它做什么。我们已经有了三种典型的中心趋势度量(平均值、中位数、模式)。很难说什么测试对你有效,因为有不同的测量方法可以满足你的要求,但对其他列表的测量方法却大不相同(如
[1]*7+[100]*7
)。这里有一个解决方案:

import statistics as stats

def tester(ell):
    mode_measure = 1 - len(set(ell))/len(ell)
    avg_measure = 1 - stats.stdev(ell)/stats.mean(ell)
    return max(avg_measure, mode_measure)

在变成编程问题之前,您需要从数学上定义您想要实现的目标。如果你对数学目标也不清楚,你的问题就不属于这一类。