Python 无需共享数据的快速/简便数组比较算法

Python 无需共享数据的快速/简便数组比较算法,python,algorithm,matlab,locality-sensitive-hash,Python,Algorithm,Matlab,Locality Sensitive Hash,我有两个数组,它们由两个相互独立的不同系统生成。我想通过比较从数组生成的几个数字来比较它们的相似性 现在,我只是比较数组的最小值、最大值和和,但我想知道是否有更好的算法?任何类型的散列算法都需要对数组之间的小浮点差异不敏感 编辑:我要做的是验证两个算法是否生成相同的数据,而不必直接比较数据。因此,该算法应该对数据中的位移敏感,对每个元素之间的微小差异相对不敏感。我不会试图将其减少到一个数字;只需传递一个tuple值,然后编写一个close\u ough函数来比较这些tuple 例如,您可以使用(

我有两个数组,它们由两个相互独立的不同系统生成。我想通过比较从数组生成的几个数字来比较它们的相似性

现在,我只是比较数组的最小值、最大值和和,但我想知道是否有更好的算法?任何类型的散列算法都需要对数组之间的小浮点差异不敏感


编辑:我要做的是验证两个算法是否生成相同的数据,而不必直接比较数据。因此,该算法应该对数据中的位移敏感,对每个元素之间的微小差异相对不敏感。

我不会试图将其减少到一个数字;只需传递一个
tuple
值,然后编写一个
close\u ough
函数来比较这些tuple

例如,您可以使用
(mean,stdev)
作为您的值,然后将
close\u ough
定义为“每个数组的平均值在另一个数组的平均值的0.25 stdev范围内”

这将为您提供每个元素与排序位置中的元素之间的差异。您可以用它构建一个类似于stdev的度量(每个值的平方、平均值、sqrt),或者取平均绝对差值,等等


或者您可以比较实际索引与“右”索引的距离。或者该值与基于平均值和stdev的指数预期值之间的距离。或者……有无数的可能性。同样,哪一个是合适的在很大程度上取决于您的应用领域。

完全取决于您对“比较它们的相似性”的定义

您想比较哪些功能您可以识别哪些功能?它们的可识别模式是什么?i、 在这个集合中,有6个临界点,有2个不连续点。。。等等

您已经提到比较最小/最大/和;评论中也提到了均值和标准差。这些都是这一套的特点

最终,您应该能够获取所有这些特性并创建一个n维描述符。例如[最小值、最大值、平均值、标准值等]

然后,您可以比较这些n维描述符,以定义其中一个是“小于”、“等于”还是“大于”。如果您想将其他集合分类为更像“集合A”还是更像“集合B”,您可以查看分类器

见:


如果浮点值是近似值,您想知道它们是否相同吗?“相似性”在什么意义上?比如比较它们的平均值和标准偏差怎么样?@user1952500差不多是的,但我不确定这些值会有多大的不同。@BrenBarn我已经在用这种方式比较了,我只想有一个数字来告诉我数组是否相似以及它们有多相似。@Cookieoff Fault:你真的需要一个数字吗?你可以像传递数字一样轻松地传递一个元组,你可以编写一个“close_ough”函数,它可以像编写一个接受数字的元组一样轻松地接受该元组……我想主要统计度量的主要问题是,它们对诸如移位之类的事情不敏感(其中统计分布相似,但数组的内容顺序不同)。我将对我的问题进行编辑以解决此问题。@Cookieoff Fault:好的,我可以编辑我的答案来处理此问题。
def mean_stdev(a):
    return mean(a), stdev(a)

def close_enough(mean_stdev_a, mean_stdev_b):
    mean_a, stdev_a = mean_stdev_a
    mean_b, stdev_b = mean_stdev_b
    diff = abs(mean_a - mean_b)
    return (diff < 0.25 * stdev_a and diff < 0.25 * stdev_b)
diffs = [elem[0] - elem[1] for elem in zip(seq, sorted(seq))]