Як отримати випадкове число між діапазоном поплавця?


414

randrange(start, stop)бере лише цілі аргументи. То як би я отримав випадкове число між двома значеннями поплавця?


2
Якщо ви хотіли оніміти, np.random.uniform(start, stop)або np.random.uniform(start, stop, samples)якщо вам потрібно кілька зразків. Інакше нижче найкращі відповіді.
sachinruk

Відповіді:


650

Використовуйте random.uniform (a, b) :

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

4
чи могло це теоретично дати 1,5 та 1,9? чи це коли-небудь виробляло б 1,50 ~ 1 і 1,89 ~?
Musixauce3000

14
@ Musixauce3000 Короткий відповідь: Так. Більш довга відповідь: Якщо ви подивитесь на документацію, в якій йдеться. Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aІншими словами, вихід Nможе дорівнювати як вводу, так aі b. У цьому випадку 1.5і 1.9.
Дан

Чи існує інший спосіб зробити це без використання .uniformфункції, а замість того .randomчи іншого, або randrange?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)повинен це зробити, навіть якщо згідно з специфікаціями це ніколи не повернеться точно 1.9(навіть теоретично).
Yonatan N

@ Musixauce3000, здається uniform(a, b), реалізовано як a + (b-a) * random()і повертає випадкове число в діапазоні [a, b) або [a, b] залежно від округлення github.com/python/cpython/blob/…
Павло

74

random.uniform(a, b)здається, те, що ви шукаєте. З документів:

Поверніть випадкове число з плаваючою точкою N таким чином, що a <= N <= b для a <= b і b <= N <= a для b <a.

Дивіться тут .


47

якщо ви хочете генерувати випадковий поплавок з N цифрами праворуч від точки, ви можете зробити це:

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

другий аргумент - кількість десяткових знаків.


Я не знаю, чому в цьому немає більшої оцінки, інші не мали механізму округлення.
TheTechRobo36414519

2

Найчастіше ви використовуєте:

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

Python надає інші дистрибутиви, якщо вам це потрібно.

Якщо ви вже numpyімпортували, ви можете використовувати його еквівалент:

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

Знову ж таки, якщо вам потрібен інший дистрибутив, numpyпередбачені ті ж дистрибутиви, що і python, а також багато додаткових .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.