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.