Gewichtete zufällige Auswahl in Python

Es ist einfach, "numpy" zu verwenden.

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


#Bestätigung
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})

Es ist fast richtig.

numpy unbenutzte Version

Es ist in Ordnung, "numpy" nur dafür zu setzen ... In diesem Fall möchten Sie vielleicht "bisect" verwenden.

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)

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

Es ist fast richtig.

Recommended Posts

Gewichtete zufällige Auswahl in Python
Zufälliger Spaziergang in Python
Balanced Random Forest in Python
Verwenden Sie Random Forest mit Python
Testen mit Zufallszahlen in Python
Erstellen Sie eine zufällige Zeichenfolge in Python
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Programmieren mit Python
Plink in Python
Konstante in Python
Zufällige gewichtete Extraktion: Walkers Alias-Methode (Python)
FizzBuzz in Python
Schritt AIC in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Krankheitsklassifizierung durch Random Forest mit Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python
Hashbar in Python
DirectLiNGAM in Python
[Python] Krankheitsklassifikation in zufälligen Wäldern - mit LDA-
LiNGAM in Python
In Python reduzieren
In Python flach drücken
Testmethoden, die zufällige Werte in Python zurückgeben
Täglicher AtCoder # 36 mit Python
Clustertext in Python
Täglicher AtCoder # 32 in Python
Täglicher AtCoder # 6 in Python
Täglicher AtCoder # 18 in Python
Bearbeiten Sie Schriftarten in Python
Singleton-Muster in Python
Dateioperationen in Python
Lesen Sie DXF mit Python
Täglicher AtCoder # 53 in Python
Tastenanschlag in Python