¿Alguna vez te has preguntado cómo seleccionar elementos aleatorios de una lista con diferente probabilidad en Python? En este artículo, discutiremos cómo hacer lo mismo. Consideremos primero el siguiente ejemplo.
Python3
import random sam_Lst = [10, 20, 3, 4, 100] ran = random.choice(sam_Lst) print(ran)
En el ejemplo anterior, la probabilidad de obtener cualquier elemento de la lista es igual. Pero queremos métodos en los que la probabilidad de elegir un elemento de la lista sea diferente. Esto se conoce como la elección aleatoria ponderada en Python. Para encontrar opciones aleatorias ponderadas en Python, existen dos formas:
- Pesos relativos
- Pesos acumulativos
La función que nos ayudará en esta situación es random.choices() . Esta función permite realizar elecciones aleatorias ponderadas en python con reemplazo.
Sintaxis:
random.choices(población, pesos=Ninguno, *, cum_weights=Ninguno, k=1)
Aquí, el parámetro ‘peso’ juega un papel importante.
Caso 1: uso de pesos relativos
El peso asignado a un elemento se conoce como peso relativo.
Ejemplo 1:
Python3
import random # Creating a number list num_lst = [1, 22, 43, 19, 13, 29] print(random.choices(num_lst, weights=( 14, 25, 30, 45, 55, 10), k=6))
Producción:
[19, 19, 13, 22, 13, 13]
En el ejemplo anterior, asignamos pesos a cada elemento de la lista. El peso del elemento ‘ 13′ es el más alto, es decir, 55, por lo que la probabilidad de que ocurra es máxima. Como podemos ver en la salida, el elemento 13 ocurre 3 veces, el 19 ocurre 2 veces y así sucesivamente. Entonces, ahora la probabilidad de elegir un elemento de la lista es diferente.
Ejemplo 2:
Python3
import random # Creating a name list name_lst = ['October', 'November', 'December', 'January', 'March', 'June'] print(random.choices(name_lst, weights=( 40, 25, 30, 5, 15, 80), k=3))
Producción:
['June', 'October', 'June']
En el ejemplo anterior, el peso del elemento ‘ Junio’ es máximo, por lo que su probabilidad de selección será máxima. Y aquí, k=3, lo que significa que estamos eligiendo solo los 3 elementos principales de la lista.
Ejemplo 3:
Python3
import random # Creating a name list name_lst = ['Fit', 'Infected', 'Recovered', 'Danger'] # Using FOR loop # to choose the element from list with # different probability for i in range(6): print("Random choice", i+1) randomele = random.choices(name_lst, weights=( 50, 80, 10, 5), k=1) print(randomele[0])
Producción:
Random choice 1 Recovered Random choice 2 Danger Random choice 3 Infected Random choice 4 Infected Random choice 5 Infected Random choice 6 Fit
En el ejemplo anterior, usamos el bucle FOR para elegir un elemento de una lista con una probabilidad diferente.
Caso 2: uso de pesos acumulativos
El peso acumulado de un elemento se determina sumando el peso de su elemento anterior y su propio peso.
Ejemplo 1:
Python3
import random # Creating a number list num_lst = [1, 22, 93, 19, 13, 25] print(random.choices(num_lst, cum_weights=( 7, 13, 15, 20, 25, 20), k=6))
Producción:
[1, 22, 93, 22, 19, 1]
En el ejemplo anterior, el peso acumulado del elemento ‘ 19′ es máximo, por lo que la probabilidad de su selección también será máxima.
Ejemplo 2:
Python3
import random # Creating a name list name_lst = ['October', 'November', 'December', 'January', 'March', 'June'] print(random.choices(name_lst, cum_weights=( 40, 20, 3, 7, 15, 15), k=3))
Producción:
['January', 'March', 'January']
En el ejemplo anterior, elegimos k=3 para obtener los 3 elementos principales que tienen la máxima probabilidad de selección.
Ejemplo 3:
Python3
import random # Creating a name list name_lst = ['October', 'November', 'December', 'January', 'March', 'June'] # Using FOR loop # to choose the element from list with # different probability for i in range(6): print("Random choice", i+1) randomele = random.choices(name_lst, cum_weights=( 7, 13, 15, 20, 25, 20), k=1) print(randomele[0])
Producción:
Random choice 1 November Random choice 2 January Random choice 3 October Random choice 4 December Random choice 5 November Random choice 6 January
En el ejemplo anterior, usamos el bucle FOR para elegir un elemento de una lista con una probabilidad diferente.
Nota: El valor de k depende de los usuarios, y de su peso relativo por lo que la suma total de pesos puede exceder 100.
Publicación traducida automáticamente
Artículo escrito por vanshgaur14866 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA