Jak uzyskać losową liczbę między liczbą zmiennoprzecinkową?


414

randrange(start, stop)przyjmuje tylko argumenty całkowite. Jak więc uzyskać losową liczbę między dwiema wartościami zmiennoprzecinkowymi?


2
Jeśli chcesz numpy to np.random.uniform(start, stop)lub np.random.uniform(start, stop, samples)jeśli chcesz wielu próbek. W przeciwnym razie poniższe odpowiedzi są najlepsze.
sachinruk,

Odpowiedzi:


650

Użyj random.uniform (a, b) :

>>> random.uniform(1.5, 1.9)
1.8733202628557872

4
czy teoretycznie mogłoby to dać 1,5 i 1,9? a może produkowałby tylko 1,50 ~ 1 i 1,89 ~?
Musixauce3000

14
@ Musixauce3000 Krótka odpowiedź: Tak. Dłuższa odpowiedź: jeśli spojrzysz na dokumentację, to Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aznaczy: Innymi słowy, wynik Nmoże być równy wejściowi ai b. W tym przypadku 1.5i 1.9.
Dan

Czy istnieje inny sposób na zrobienie tego bez użycia .uniformfunkcji, ale zamiast tego z albo .randomlub randrange?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)powinien to zrobić, nawet jeśli zgodnie ze specyfikacją nigdy nie zwróci dokładnie 1.9(nawet teoretycznie).
Yonatan N

@ Musixauce3000 wydaje się, że uniform(a, b)jest zaimplementowany jako a + (b-a) * random()i zwraca losową liczbę z zakresu [a, b) lub [a, b] w zależności od zaokrąglenia github.com/python/cpython/blob/…
Pavel

74

random.uniform(a, b)wydaje się być tym, czego szukasz. Z dokumentów:

Zwraca losową liczbę zmiennoprzecinkową N taką, że a <= N <= b dla a <= b oraz b <= N <= a dla b <a.

Zobacz tutaj .


47

jeśli chcesz wygenerować losową liczbę zmiennoprzecinkową z cyframi N na prawo od punktu, możesz to zrobić:

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

drugim argumentem jest liczba miejsc po przecinku.


Nie wiem, dlaczego to nie ma więcej głosów pozytywnych, inni nie mieli mechanizmu zaokrąglania.
TheTechRobo36414519

2

Najczęściej używałbyś:

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

Python zapewnia inne dystrybucje, jeśli potrzebujesz.

Jeśli numpyjuż zaimportowałeś, możesz użyć jego odpowiednika:

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

Ponownie, jeśli potrzebujesz innej dystrybucji, numpyzapewnia te same dystrybucje co Python, a także wiele dodatkowych .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.