Ein bisschen Mathe hier.
Ein regulärer Würfel gibt jede Zahl 1-6 mit gleicher Wahrscheinlichkeit, nämlich 1/6
. Dies wird als einheitliche Verteilung bezeichnet (die diskrete Version davon, im Gegensatz zur fortlaufenden Version). Das heißt, wenn X
eine Zufallsvariable ist, die das Ergebnis einer einzelnen Rolle beschreibt, wird X~U[1,6]
- also X
gleichmäßig auf alle möglichen Ergebnisse des Würfelwurfs verteilt, 1 bis 6.
Dies ist gleichbedeutend mit der Auswahl einer Zahl in [0,1)
bei der Aufteilung in 6 Abschnitte: [0,1/6)
, [1/6,2/6)
, [2/6,3/6)
, [3/6,4/6)
, [4/6,5/6)
, [5/6,1)
.
Sie beantragen eine andere Verteilung, die voreingenommen ist.
Der einfachste Weg, dies zu erreichen, besteht darin, den Abschnitt [0,1)
je nach gewünschter Ausrichtung in 6 Teile aufzuteilen. Also in Ihrem Fall würden Sie es in folgende Teile teilen wollen:
[0,0.2)
, [0.2,0.4)
, [0.4,0.55)
, 0.55,0.7)
, [0.7,0.84)
, [0.84,1)
.
Wenn Sie sich den Wikipedia-Eintrag ansehen, werden Sie sehen, dass in diesem Fall die kumulative Wahrscheinlichkeitsfunktion verwendet wird nicht aus 6 Teilen gleicher Länge bestehen, sondern aus 6 Teilen, die sich in der Länge entsprechend der von Ihnen gegebenen Neigung unterscheiden. Gleiches gilt für die Massenverteilung.
Zurück zur Frage, übersetze es je nach verwendeter Sprache einfach zurück in deinen Würfelwurf. In Python ist hier ein sehr skizzenhaftes, wenn auch funktionierendes Beispiel:
%Vor%Mehr Sprache Agnostiker, aber Sie könnten eine Nachschlagetabelle verwenden.
Verwenden Sie eine Zufallszahl im Bereich 0-1 und suchen Sie den Wert in einer Tabelle:
%Vor% Siehe das Rezept für Alias-Methode von Walker für zufällige Objekte mit unterschiedlichen Wahrscheinlichkeiten.
Ein Beispiel, Zeichenfolgen A B C oder D mit Wahrscheinlichkeiten .1 .2 .3 .4 -
Prost - Denis
Es ist ein wenig überraschend, dass die np.random.choice
Antwort gibt wurde hier nicht gegeben.
Die Option p gibt "die Wahrscheinlichkeiten für jeden Eintrag in a " an, wobei a np.range(N)
für uns ist. "Wenn nicht gegeben, nimmt das Beispiel eine einheitliche Verteilung über alle Einträge in a " an.
Um nur eine effizientere (und pythonische3) Lösung vorzuschlagen, kann man bisect im Vektor der akkumulierten Werte zu suchen - die darüber hinaus vorberechnet und gespeichert werden können in der Hoffnung, dass nachfolgende Aufrufe an die Funktion sich auf die gleiche "Neigung" beziehen (um dem Frage-Sprachgebrauch zu folgen).
%Vor%Wenn Python 3 nicht vorhanden ist, kann man einfach eine einfache Schleife schreiben, um die kumulative Summe zu berechnen.
Tags und Links python probability