randrange(start, stop)
przyjmuje tylko argumenty całkowite. Jak więc uzyskać losową liczbę między dwiema wartościami zmiennoprzecinkowymi?
randrange(start, stop)
przyjmuje tylko argumenty całkowite. Jak więc uzyskać losową liczbę między dwiema wartościami zmiennoprzecinkowymi?
Odpowiedzi:
Użyj random.uniform (a, b) :
>>> random.uniform(1.5, 1.9)
1.8733202628557872
Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a
znaczy: Innymi słowy, wynik N
może być równy wejściowi a
i b
. W tym przypadku 1.5
i 1.9
.
.uniform
funkcji, ale zamiast tego z albo .random
lub randrange
?
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).
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/…
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.
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 numpy
już 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, numpy
zapewnia te same dystrybucje co Python, a także wiele dodatkowych .
np.random.uniform(start, stop)
lubnp.random.uniform(start, stop, samples)
jeśli chcesz wielu próbek. W przeciwnym razie poniższe odpowiedzi są najlepsze.