Làm thế nào để có được một số ngẫu nhiên giữa một phạm vi nổi?


414

randrange(start, stop)chỉ lấy đối số nguyên. Vậy làm thế nào tôi có được một số ngẫu nhiên giữa hai giá trị float?


2
Nếu bạn muốn numpy nó np.random.uniform(start, stop)hoặc np.random.uniform(start, stop, samples)nếu bạn muốn nhiều mẫu. Nếu không dưới đây câu trả lời là tốt nhất.
sachinruk

Câu trả lời:


650

Sử dụng Random.uniform (a, b) :

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

4
lý thuyết này có thể tạo ra 1,5 và 1,9? hoặc nó sẽ chỉ sản xuất 1,50 ~ 1 và 1,89 ~?
Musixauce3000

14
@ Musixauce3000 Trả lời ngắn gọn: Có. Câu trả lời dài hơn: Nếu bạn nhìn vào tài liệu, nó nói Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < arằng nói cách khác, đầu ra Ncó thể bằng đầu vào ab. Trong trường hợp này 1.51.9.
Dan

Có cách nào khác để làm điều này mà không sử dụng .uniformchức năng, nhưng thay vào đó bằng .randomhoặcrandrange ?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)nên làm điều đó, mặc dù theo thông số kỹ thuật, điều này sẽ không bao giờ trở lại chính xác 1.9(ngay cả trong lý thuyết).
Yonatan N

@ Musixauce3000 dường như uniform(a, b)được triển khai a + (b-a) * random()và trả về một số ngẫu nhiên trong phạm vi [a, b) hoặc [a, b] tùy thuộc vào làm tròn github.com/python/cpython/blob/ trộm
Pavel

74

random.uniform(a, b)dường như là những gì bạn đang tìm kiếm. Từ các tài liệu:

Trả về số dấu phẩy động ngẫu nhiên N sao cho a <= N <= b cho a <= b và b <= N <= a cho b <a.

Xem ở đây .


47

nếu bạn muốn tạo một số float ngẫu nhiên có N chữ số ở bên phải điểm, bạn có thể thực hiện điều này:

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

đối số thứ hai là số thập phân.


Tôi không biết tại sao cái này không có nhiều upvote hơn, những cái khác không có cơ chế làm tròn.
TheTechRobo36414519

2

Thông thường nhất, bạn sẽ sử dụng:

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

Python cung cấp các bản phân phối khác nếu bạn cần.

Nếu bạn đã numpynhập, bạn có thể sử dụng tương đương:

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

Một lần nữa, nếu bạn cần một bản phân phối khác, numpy cung cấp các bản phân phối tương tự như python, cũng như nhiều bản phân phối bổ sung .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.