Actualmente estoy aprendiendo probabilidad en un curso en línea.
Me está enseñando a utilizar este método asombrosamente sencillo, ¡y hasta ahora ha funcionado a la perfección!
Dónde e
es un elemento de la lista de números a normalizar:
Calcula un normalizador (multiplicador) así:
normalizer = 1 / (e1 + e2 + e3)
A continuación, multiplica el normalizador a cada elemento de la lista:
((e1 * normalizer) + (e2 * normalizer) + .... + (en * normalizer) ) == 1.0
...y sumarán 1,0.
Así que tomando tu ejemplo de los números 10 y 40:
normalizer = 1 / (10 + 40) = 0.02
(10 * 0.02) = 0.2
(40 * 0.02) = 0.8
(0.2 + 0.8) = 1.0
De ahí obtenemos nuestro 1,0.
Me he adelantado y he escrito un sencillo script en Python que puedes ejecutar en casi cualquier intérprete de Python y jugar con los parámetros y probar los resultados.
# python script
import random as rnd
# number of items in list, change this to as huge a list as you want
itemsInList = 5
# specify min and max value bounds for randomly generated values
# change these to play around with different value ranges
minVal = 8
maxVal = 20
# creates a list of random values between minVal and maxVal, and sort them
numList = sorted( [rnd.randint(minVal, maxVal) for x in range(itemsInList)] )
print ('initial list is\n{}\n'.format(numList))
# calculate the normalizer, using: (1 / (sum_of_all_items_in_list))
normalizer = 1 / float( sum(numList) )
# multiply each item by the normalizer
numListNormalized = [x * normalizer for x in numList]
print('Normalized list is\n{}\n'.format(numListNormalized))
print('Sum of all items in numListNormalized is {}'.format(sum(numListNormalized)))
Ejecutando el código se obtiene este ejemplo:
initial list is
[9, 12, 15, 16, 19]
Normalized list is
[0.1267605633802817, 0.16901408450704225, 0.2112676056338028, 0.22535211267605634, 0.26760563380281693]
Sum of all items in numListNormalized is 1.0
Espero que te sirva de ayuda.