j'aimerais faire un tirage au sort pondéré.
Je m'explique. Prenons le dico suivant {"A":1,"B":2}
J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un
tel tirage au sort. Savez vous si une telle fonction existe, avant que
je dev la mienne ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Tanguy Ortolo
Maïeul, 2013-09-03 10:31+0200:
Bonjour,
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Je ne sais pas si ça existe, mais j'ai des idées pour en coder une. Je construirais un dictionnaire inversé, indexé par les poids cumulés, soit dans ton cas : {1: 'A', 3: 'B'}
Ensuite, tirer un flottant aléatoire entre zéro et le total, ici trois, puis parcourir les clefs du dictionnaire et sortir avec la valeur associée à la première clef qui dépasse de la valeur tirée.
-- . o . . . o Tanguy o o o
Maïeul, 2013-09-03 10:31+0200:
Bonjour,
j'aimerais faire un tirage au sort pondéré.
Je m'explique. Prenons le dico suivant {"A":1,"B":2}
J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un
tel tirage au sort. Savez vous si une telle fonction existe, avant que
je dev la mienne ?
Je ne sais pas si ça existe, mais j'ai des idées pour en coder une. Je
construirais un dictionnaire inversé, indexé par les poids cumulés, soit
dans ton cas :
{1: 'A', 3: 'B'}
Ensuite, tirer un flottant aléatoire entre zéro et le total, ici trois,
puis parcourir les clefs du dictionnaire et sortir avec la valeur
associée à la première clef qui dépasse de la valeur tirée.
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Je ne sais pas si ça existe, mais j'ai des idées pour en coder une. Je construirais un dictionnaire inversé, indexé par les poids cumulés, soit dans ton cas : {1: 'A', 3: 'B'}
Ensuite, tirer un flottant aléatoire entre zéro et le total, ici trois, puis parcourir les clefs du dictionnaire et sortir avec la valeur associée à la première clef qui dépasse de la valeur tirée.
-- . o . . . o Tanguy o o o
rejoc
Le 03/09/2013 10:31, Maïeul a écrit :
Bonjour,
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Merci d'avance
Un tirage sur une liste qui contiendrait par exemple : ['A', 'B', 'B'] ?
l = list(itertools.chain.from_iterable([k]*v for k, v in dico.items()))
Le 03/09/2013 10:31, Maïeul a écrit :
Bonjour,
j'aimerais faire un tirage au sort pondéré.
Je m'explique. Prenons le dico suivant {"A":1,"B":2}
J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un
tel tirage au sort. Savez vous si une telle fonction existe, avant que
je dev la mienne ?
Merci d'avance
Un tirage sur une liste qui contiendrait par exemple : ['A', 'B', 'B'] ?
l = list(itertools.chain.from_iterable([k]*v for k, v in dico.items()))
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Merci d'avance
Un tirage sur une liste qui contiendrait par exemple : ['A', 'B', 'B'] ?
l = list(itertools.chain.from_iterable([k]*v for k, v in dico.items()))
Maïeul
Le 03.09.13 13:45, rejoc a écrit :
Le 03/09/2013 10:31, Maïeul a écrit :
Bonjour,
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Merci d'avance
Un tirage sur une liste qui contiendrait par exemple : ['A', 'B', 'B'] ?
l = list(itertools.chain.from_iterable([k]*v for k, v in dico.items()))
oui c'est un peu près ce que j'ai fait ... Mais je demandais si une fonction "directe" existait.
j'aimerais faire un tirage au sort pondéré.
Je m'explique. Prenons le dico suivant {"A":1,"B":2}
J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un
tel tirage au sort. Savez vous si une telle fonction existe, avant que
je dev la mienne ?
Merci d'avance
Un tirage sur une liste qui contiendrait par exemple : ['A', 'B', 'B'] ?
l = list(itertools.chain.from_iterable([k]*v for k, v in dico.items()))
oui c'est un peu près ce que j'ai fait ...
Mais je demandais si une fonction "directe" existait.
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Merci d'avance
Un tirage sur une liste qui contiendrait par exemple : ['A', 'B', 'B'] ?
l = list(itertools.chain.from_iterable([k]*v for k, v in dico.items()))
oui c'est un peu près ce que j'ai fait ... Mais je demandais si une fonction "directe" existait.
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Je ne sais pas si ça existe, mais j'ai des idées pour en coder une. Je construirais un dictionnaire inversé, indexé par les poids cumulés, soit dans ton cas : {1: 'A', 3: 'B'}
Ensuite, tirer un flottant aléatoire entre zéro et le total, ici trois, puis parcourir les clefs du dictionnaire et sortir avec la valeur associée à la première clef qui dépasse de la valeur tirée.
J'ai opté pour la solution "produire une liste avec x element de chaque valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de perf.
j'aimerais faire un tirage au sort pondéré.
Je m'explique. Prenons le dico suivant {"A":1,"B":2}
J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un
tel tirage au sort. Savez vous si une telle fonction existe, avant que
je dev la mienne ?
Je ne sais pas si ça existe, mais j'ai des idées pour en coder une. Je
construirais un dictionnaire inversé, indexé par les poids cumulés, soit
dans ton cas :
{1: 'A', 3: 'B'}
Ensuite, tirer un flottant aléatoire entre zéro et le total, ici trois,
puis parcourir les clefs du dictionnaire et sortir avec la valeur
associée à la première clef qui dépasse de la valeur tirée.
J'ai opté pour la solution "produire une liste avec x element de chaque
valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de
perf.
j'aimerais faire un tirage au sort pondéré. Je m'explique. Prenons le dico suivant {"A":1,"B":2} J'aimerais faire un "tirage au sort" tel P(A) = 1/3 et P(B)=2/3
Je n'ai pas trouvé dans le module random de quoi faire directement un tel tirage au sort. Savez vous si une telle fonction existe, avant que je dev la mienne ?
Je ne sais pas si ça existe, mais j'ai des idées pour en coder une. Je construirais un dictionnaire inversé, indexé par les poids cumulés, soit dans ton cas : {1: 'A', 3: 'B'}
Ensuite, tirer un flottant aléatoire entre zéro et le total, ici trois, puis parcourir les clefs du dictionnaire et sortir avec la valeur associée à la première clef qui dépasse de la valeur tirée.
J'ai opté pour la solution "produire une liste avec x element de chaque valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de perf.
J'ai opté pour la solution "produire une liste avec x element de chaque valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de perf.
Probablement, mais je ne sais pas, ça dépend comment les listes sont implémentées en Python. En revanche, c'est moins générique, ça ne marche qu'avec des poids entiers, et pas trop grands sinon ça fait une liste délirante.
-- . o . . . o Tanguy o o o
Maïeul, 2013-09-03 17:34+0200:
J'ai opté pour la solution "produire une liste avec x element de chaque
valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de
perf.
Probablement, mais je ne sais pas, ça dépend comment les listes sont
implémentées en Python. En revanche, c'est moins générique, ça ne marche
qu'avec des poids entiers, et pas trop grands sinon ça fait une liste
délirante.
J'ai opté pour la solution "produire une liste avec x element de chaque valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de perf.
Probablement, mais je ne sais pas, ça dépend comment les listes sont implémentées en Python. En revanche, c'est moins générique, ça ne marche qu'avec des poids entiers, et pas trop grands sinon ça fait une liste délirante.
-- . o . . . o Tanguy o o o
Maïeul
Le 04.09.13 11:11, Tanguy Ortolo a écrit :
Maïeul, 2013-09-03 17:34+0200:
J'ai opté pour la solution "produire une liste avec x element de chaque valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de perf.
Probablement, mais je ne sais pas, ça dépend comment les listes sont implémentées en Python. En revanche, c'est moins générique, ça ne marche qu'avec des poids entiers, et pas trop grands sinon ça fait une liste délirante.
oui, effectivement dans mon cas présent c'est fonctionnel. Pas forcément tout le tps.
J'ai opté pour la solution "produire une liste avec x element de chaque
valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de
perf.
Probablement, mais je ne sais pas, ça dépend comment les listes sont
implémentées en Python. En revanche, c'est moins générique, ça ne marche
qu'avec des poids entiers, et pas trop grands sinon ça fait une liste
délirante.
oui, effectivement dans mon cas présent c'est fonctionnel. Pas forcément
tout le tps.
J'ai opté pour la solution "produire une liste avec x element de chaque valeur" et tirer au sort dedans. A mon avis plus rapidement en terme de perf.
Probablement, mais je ne sais pas, ça dépend comment les listes sont implémentées en Python. En revanche, c'est moins générique, ça ne marche qu'avec des poids entiers, et pas trop grands sinon ça fait une liste délirante.
oui, effectivement dans mon cas présent c'est fonctionnel. Pas forcément tout le tps.