Tirage aléatoire dans une liste avec coefficients python
Résolu/Fermé
leandre44
-
10 déc. 2021 à 14:28
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 15 déc. 2021 à 16:59
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 15 déc. 2021 à 16:59
2 réponses
jee pee
Messages postés
39649
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
26 avril 2024
9 238
10 déc. 2021 à 15:03
10 déc. 2021 à 15:03
Bonjour,
Tu pourrais faire une liste avec (élément, poids) (('A',2),('B',3),('C',5) ....
Avec cette liste tu génères une autre liste ('A','A','B','B','B','C','C','C','C','C',...)
Et sur cette dernière liste tu sélectionnes une valeur aléatoirement.
Tu pourrais faire une liste avec (élément, poids) (('A',2),('B',3),('C',5) ....
Avec cette liste tu génères une autre liste ('A','A','B','B','B','C','C','C','C','C',...)
Et sur cette dernière liste tu sélectionnes une valeur aléatoirement.
mamiemando
Messages postés
33079
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
23 avril 2024
7 749
Modifié le 15 déc. 2021 à 17:09
Modifié le 15 déc. 2021 à 17:09
Bonjour,
Si tu veux faire un seul tirage :
Dans les deux cas, tu peux passer en paramètre une distribution de probabilité discrète.
Si tu veux faire plusieurs tirages, c'est le même principe :
L'avantage de la version
Exemples :
Bonne chance
Si tu veux faire un seul tirage :
- voir
random.choices
(aveck = 1
) pour la version standard - voir
np.random.choice
pour la versionnumpy
. Note que contrairement à la version standard les poids doivent être normalisés (i.e., leur somme doit valoir 1)
Dans les deux cas, tu peux passer en paramètre une distribution de probabilité discrète.
Si tu veux faire plusieurs tirages, c'est le même principe :
- voir
random.choices
pour la version standard (aveck > 1
); - voir le paramètre
size
denp.random.choice
pour la versionnumpy
.
L'avantage de la version
numpy, c'est que si tu veux tirer un tableau (quel que soit le nombre de dimensions), le paramètre
sizepermet de tout faire directement (et par la suite, si tu as des calculs à faire, ce sera plus rapide en utilisant les fonctionnalités de
numpyqu'en python standard). Pour un jeu, ça n'est pas forcément un aspect déterminant car il souvent peu de calculs, mais pour du calcul scientifique ça peut être un point important.
Exemples :
import random print(random.choices(["apple", "banana", "cherry"], k = 1, weights = [8, 1, 1])) print(random.choices(["apple", "banana", "cherry"], k = 5, weights = [8, 1, 1]))
import numpy as np import numpy.random print(np.random.choice(["apple", "banana", "cherry"], p = [0.8, 0.1, 0.1])) print(np.random.choice(["apple", "banana", "cherry"], size= (5, ), p = [0.8, 0.1, 0.1]))
Bonne chance