Масштабирование чисел от 0 до 1 - PullRequest
0 голосов
/ 29 августа 2011

У меня есть следующий список чисел:

3.16, 4.72, 6.44, 8.25, 3.76, 4.87, 5.76, 6.5, 7.32

Я должен изменить масштаб чисел между (0,1) такой, что:

1) Наименьшее число получает значение, ближайшее к 0, но не 0.

2) Наибольшее число получает значение, ближайшее к 1, но не 1.

0 в моем исследовании означает «идеально подходит», а 1 означает «совершенно не подходит», поэтому я хочу исключить их из конечного результата.

Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

2 голосов
/ 07 декабря 2011

Поможет ли это преобразование?

V' = 1/(1 + e^(-V)) -------- Logistic function


Домен - действительные числа, поэтому V может принимать любые действительные значения
Range - (0,1), чтобы 0<V'<1, V'<>0V'<>1

0 голосов
/ 29 августа 2011

Я не уверен, что понимаю ваш вопрос, но нахождение максимального числа в наборе и деление каждого числа в наборе на это максимальное число даст вам подходящий диапазон.

0 голосов
/ 29 августа 2011

Быстрый пример на Python с использованием аффинного преобразования:

 list = [3.16, 4.72, 6.44, 8.25, 3.76, 4.87, 5.76, 6.5, 7.32]

 # find the minimum value and range, and add 1% padding
 range_value = max(list) - min(list)
 range_value = range_value + range_value/50
 min_value = min(list) - range_value/100     

 # subtract the minimum value and divide by the range
 for index, item in enumerate(list):
    list[index] = (item - min_value) / range_value

 print list

Дает результат:

 [0.010000000000000026, 0.310473824107246, 0.64176547632805592, 0.99039215686274518, 0.1255668554258639, 0.33936553796371205, 0.51078970684541003, 0.65332216187064218, 0.81126353095265591]

Конечно, вы можете изменить количество отступов так, чтобы оно было минимальным - для диапазона вы захотите добавить в два раза больше того, что делаете для минимального значения, потому что вам нужно добавить отступ к каждый конец диапазона.

0 голосов
/ 29 августа 2011

Возможно, вам нужно аффинное отображение (т. Е. В форме y = mx + c), такое, что:

not_quite_0 = m*min_val + c
not_quite_1 = m*max_val + c

Решая эти уравнения, вы получите:

m = (not_quite_1 - not_quite_0) / (max_val - min_val)
c = (max_val*not_quite_0 - min_val*not_quite_1) / (max_val - min_val)

Возможно, вы можетеопределить not_quite_0 = 0 + eps и not_quite_1 = 1 - eps, где eps - это очень и очень небольшое значение.

...