Я бы не попытался уменьшить это до одного числа; просто передайте значения tuple
и напишите функцию close_enough
, которая сравнивает кортежи.
Например, вы можете использовать (mean, stdev)
как свое значение, а затем определить close_enough
как «среднее значение для каждого массива находится в пределах 0.25 stdev от среднего значения другого массива».
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)
Очевидно, что правильное значение - это то, что вы хотите настроить на основе вашего прецедента. И, может быть, вы на самом деле хотите его обосновать, например, дисперсию (квадрат stdev), или дисперсию и перекос, или stdev и sqrt (перекос), или некоторую совершенно другую нормализацию, помимо среднего арифметического. Все зависит от того, что представляют ваши цифры, и что означает «достаточно близко».
Не зная ничего о вашей области применения, трудно дать что-то более конкретное. Например, если вы сравниваете звуковые отпечатки пальцев (или отпечатки пальцев ДНК или отпечатки пальцев), вам нужно что-то очень отличное от того, сравниваете ли вы JPEG-сжатые изображения ландшафтов.
В своем комментарии вы говорите, что хотите быть чувствительными к порядку значений. Чтобы справиться с этим, вы можете генерировать некоторую меру, как «вне порядка» последовательность. Например:
diffs = [elem[0] - elem[1] for elem in zip(seq, sorted(seq))]
Это дает вам разницу между каждым элементом и элементом, который будет находиться в отсортированном положении. Вы можете построить из этого stdev-подобную меру (квадрат каждого значения, среднее значение, sqrt) или принять средний абсолютный разброс и т. Д.
Или вы можете сравнить, как далеко от фактического индекса от «правого», индекс. Или как далеко это значение от ожидаемого значения по его индексу на основе среднего и stdev. Или ... есть бесчисленные возможности. Опять же, это зависит в значительной степени от вашей области применения.
Хотите знать, если они идентичны, если значения с плавающей точкой округляются? – user1952500
«Сходства» в каком смысле? Как, например, сравнение их средств и стандартных отклонений? – BrenBarn
@ user1952500 довольно да, но я не уверен, насколько разные значения могут быть. – CookieOfFortune