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?


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

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 .


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.


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 .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.