Wie erhalte ich eine Zufallszahl zwischen einem Float-Bereich?

413

randrange(start, stop)Nimmt nur ganzzahlige Argumente an. Wie würde ich also eine Zufallszahl zwischen zwei Gleitkommawerten erhalten?

Mantis Toboggan
quelle
2
Wenn Sie numpy wollten, ist es np.random.uniform(start, stop)oder np.random.uniform(start, stop, samples)wenn Sie mehrere Proben wollten. Ansonsten sind die folgenden Antworten am besten.
Sachinruk

Antworten:

648

Verwenden Sie random.uniform (a, b) :

>>> random.uniform(1.5, 1.9)
1.8733202628557872
Yuri Stuken
quelle
4
könnte dies theoretisch 1,5 und 1,9 ergeben? oder würde es immer nur 1,50 ~ 1 und 1,89 ~ produzieren?
Musixauce3000
14
@ Musixauce3000 Kurze Antwort: Ja. Längere Antwort: Wenn Sie sich die Dokumentation ansehen, heißt es: Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aMit anderen Worten, die Ausgabe Nkann entweder der Eingabe aoder entsprechen b. In diesem Fall 1.5und 1.9.
Dan
Gibt es eine andere Möglichkeit, dies zu tun, ohne die .uniformFunktion zu verwenden, sondern mit entweder .randomoder randrange?
DerryckDX
1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)sollte es tun, obwohl dies gemäß den Spezifikationen niemals genau zurückkehren wird 1.9(auch nicht in der Theorie).
Yonatan N
@ Musixauce3000 scheint uniform(a, b)implementiert zu sein a + (b-a) * random()und gibt eine Zufallszahl im Bereich [a, b) oder [a, b] zurück, abhängig von der Rundung github.com/python/cpython/blob/…
Pavel
74

random.uniform(a, b)scheint das zu sein, wonach du suchst. Aus den Dokumenten:

Geben Sie eine zufällige Gleitkommazahl N zurück, so dass a <= N <= b für a <= b und b <= N <= a für b <a.

Siehe hier .

garnertb
quelle
47

Wenn Sie einen zufälligen Float mit N Ziffern rechts vom Punkt generieren möchten, können Sie Folgendes tun:

round(random.uniform(1,2), N)

Das zweite Argument ist die Anzahl der Dezimalstellen.

Baurin Leza
quelle
Ich weiß nicht, warum dies nicht mehr positive Stimmen hat, die anderen hatten keinen Rundungsmechanismus.
TheTechRobo36414519
2

Am häufigsten würden Sie verwenden:

import random
random.uniform(a, b) # range [a, b) or [a, b] depending on floating-point rounding

Python bietet bei Bedarf weitere Distributionen .

Wenn Sie bereits numpyimportiert haben , können Sie das entsprechende verwenden:

import numpy as np
np.random.uniform(a, b) # range [a, b)

Wenn Sie eine andere Distribution benötigen, numpybieten Sie dieselben Distributionen wie Python sowie viele zusätzliche Distributionen .

stwykd
quelle