Choix aléatoire pondéré en python

Il est facile d'utiliser «numpy».

import numpy as np

d = [("foo", 98), ("bar", 844), ("baz", 1028)]
a, w = zip(*d)
print(a, w)
# -> ('foo', 'bar', 'baz') (98, 844, 1028)

w2 = np.array(w) / sum(w)
v = np.random.choice(a, p=w2)
print(v)
# -> baz


#Vérification
from collections import Counter
c = [ np.random.choice(a, p=w2) for i in range(sum(w)) ]
print(Counter(c))
# -> Counter({'baz': 1051, 'bar': 824, 'foo': 95})

C'est presque vrai.

version inutilisée numpy

Vous pouvez mettre numpy juste pour ça ... Dans ce cas, vous pouvez utiliser bisect.

import bisect
import itertools
import random

d = [("foo", 98), ("bar", 844), ("baz", 1028)]
a, w = zip(*d)
print(a, w)

ac = list(itertools.accumulate(w))
f = lambda : bisect.bisect(ac, random.random() * ac[-1])
v = a[f()]
print(v)

#Vérification
from collections import Counter
c = [ a[f()] for i in range(sum(w)) ]
print(Counter(c))
# -> Counter({'baz': 1010, 'bar': 851, 'foo': 109})

C'est presque vrai.

Recommended Posts

Choix aléatoire pondéré en python
Marche aléatoire en Python
Forêt aléatoire équilibrée en python
Utiliser Random Forest avec Python
Tester avec des nombres aléatoires en Python
Créer une chaîne aléatoire en Python
Python en optimisation
CURL en Python
Métaprogrammation avec Python
Python 3.3 avec Anaconda
Géocodage en python
Méta-analyse en Python
Unittest en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Programmation avec Python
Plink en Python
Constante en Python
Extraction pondérée aléatoire: méthode d'alias de Walker (Python)
FizzBuzz en Python
Étape AIC en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Classification des maladies par Random Forest en utilisant Python
Constante en Python
nCr en Python.
format en python
Scons en Python 3
Puyopuyo en python
python dans virtualenv
PPAP en Python
Quad-tree en Python
Réflexion en Python
Chimie avec Python
Hashable en Python
DirectLiNGAM en Python
[Python] Classification des maladies dans une forêt aléatoire-avec LDA-
LiNGAM en Python
Aplatir en Python
Aplatir en python
Méthodes de test qui renvoient des valeurs aléatoires en Python
AtCoder # 36 quotidien avec Python
Texte de cluster en Python
Daily AtCoder # 32 en Python
Daily AtCoder # 6 en Python
Daily AtCoder # 18 en Python
Modifier les polices en Python
Motif singleton en Python
Opérations sur les fichiers en Python
Lire DXF avec python
Daily AtCoder # 53 en Python
Séquence de touches en Python