2014-09-18 5 views
-3

Возможно, для этого есть ответ, но я даже не знаю, что я ищу. На самом деле это скорее статистический вопрос, чем вопрос программирования. (все же я хочу сделать это с помощью python). Так или иначе, вот что я хочу сделать;Python: Нужна помощь О статистике

Предположим, у меня есть группа чисел в диапазоне 0-999999999. Я хочу, чтобы python изменял эти числа и помещал их в пределы 0-10.

Например, у меня есть 3 номера [40, 23, 456]. Я хочу, чтобы python менял эти числа в соответствии с их значением в группе на что-то вроде этого [3, 1, 10].

Что я пытаюсь: 1- Найти максимальное число 2- Найти мин число 3- х = (макс - мин)/10 4- changednumber = (число-мин)/х

Это делает трюк, но когда существует огромный разрыв между максимальным числом и другими, значения не идут так, как я хочу. Скажем, числа [0, 23, 500, 24254363] в этой серии идут примерно как [0, 0, 1, 10]. Я ожидаю, что это будет [0, 1, 5, 10]. Я должен каким-то образом включать в себя количество чисел, но я не знаю, как это сделать.

Надеясь, что вы понимаете, чего я пытаюсь достичь; - Есть ли какая-нибудь функция, которая заставляет python автоматически делать то, что я пытаюсь сделать? - Если нет, как мне сделать расчеты. (Я всегда был плохой статистика)

+0

Пожалуйста, объясните, как вы получаете эти цифры. Откуда взялись «[3, 1, 10]» и «[0, 1, 5, 10]»? – BrenBarn

+0

Я написал их случайным образом, чтобы привести пример. Чтобы объяснить этот пример, [40 -> 3, 23 -> 1, 456 -> 10] Я хочу, чтобы python выполнял этот переход в соответствии с числами и ограничениями, которые я дал. Числа - 40, 23, 456, а в этом примере - 0 и 10. – Soulcry

+0

Это все еще недостаточно ясно. Например, почему он дает 3, 1, 10 вместо 2, 1, 10? – BrenBarn

ответ

0

Вы ищете технику нормализации называется «минимакс масштабирование»

Для более типичной 0-1 нормализации вы использовать уравнение

  (x - min) 
f(x) = -------------- 
      max - min 

И если вы хотите определенный диапазон (а, б), вы можете просто изменить уравнение следующим образом:

уравнение просто:

 (b-a)(x - min) 
f(x) = -------------- + a 
      max - min 

И если мы это реализуем, это выглядит следующим образом:

def minmax_scaler(X, new_range): 
    min_val = min(X) 
    max_val = max(X) 
    scaled = [] 

    for x in X: 
     numerator = (new_range[1]-new_range[0])*(x - min_val) 
     denominator = max_val - min_val 
     scaled.append(numerator/denominator + new_range[0]) 
    return scaled 

print(minmax_scaler(X=[40, 23, 456], new_range=[0,10])) 

который печатает

[0.39260969976905313, 0.0, 10.0] 

Я думаю, что это то, что вы хотите, верно?

+0

Заманчиво думать, что это то, чего он хочет, но это не согласуется с данными примера, которые он дал. – BrenBarn

+0

спасибо, что ответили, это близко, но, к сожалению, не точная вещь, которую я ищу.Использование кода; print (minmax_scaler (X = [40, 23, 456, 38, 40, 51, 13, 45, 10], new_range = [0,10])) Если я ввожу это, он возвращает [0, 0 , 10, 0, 0, 0, 0, 0, 0] Но поскольку большинство чисел низкое, я хочу, чтобы моя программа «нормализовала» его и вернула что-то вроде этого [4, 2, 10, 4, 4, 5, 1, 4, 1] Я написал эти цифры в качестве примера, я их не вычислил – Soulcry

Смежные вопросы