Bagaimana cara mendapatkan nomor acak antara rentang float?


414

randrange(start, stop)hanya membutuhkan argumen integer. Jadi bagaimana saya mendapatkan angka acak antara dua nilai float?


2
Jika Anda ingin numpy, itu np.random.uniform(start, stop)atau np.random.uniform(start, stop, samples)jika Anda ingin beberapa sampel. Kalau tidak, jawaban di bawah ini yang terbaik.
sachinruk

Jawaban:


650

Gunakan acak. Seragam (a, b) :

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

4
dapatkah ini secara teoritis menghasilkan 1,5 dan 1,9? atau apakah hanya akan menghasilkan 1,50 ~ 1 dan 1,89 ~?
Musixauce3000

14
@ Musixauce3000 Jawaban Singkat: Ya. Jawaban yang lebih panjang: Jika Anda melihat dokumentasi itu menyatakan Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aDengan kata lain output Ndapat sama dengan input adan b. Dalam hal ini 1.5dan 1.9.
Dan

Apakah ada cara lain untuk melakukan ini tanpa menggunakan .uniformfungsi, tetapi sebaliknya dengan salah satu .randomatau randrange?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)harus melakukannya, meskipun menurut spesifikasi ini tidak akan pernah kembali persis 1.9(bahkan secara teori).
Yonatan N

@ Musixauce3000 tampaknya uniform(a, b)diimplementasikan sebagai a + (b-a) * random()dan mengembalikan angka acak dalam kisaran [a, b) atau [a, b] tergantung pada pembulatan github.com/python/cpython/blob/…
Pavel

74

random.uniform(a, b)tampaknya apa yang Anda cari. Dari dokumen:

Kembalikan angka floating point acak N sehingga a <= N <= b untuk a <= b dan b <= N <= a untuk b <a.

Lihat di sini .


47

jika Anda ingin menghasilkan float acak dengan N digit di sebelah kanan titik, Anda bisa membuatnya:

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

argumen kedua adalah jumlah desimal.


Saya tidak tahu mengapa ini tidak memiliki lebih banyak upvotes, yang lain tidak memiliki mekanisme pembulatan.
TheTechRobo36414519

2

Paling umum, Anda akan menggunakan:

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

Python menyediakan distribusi lain jika Anda perlu.

Jika sudah numpymengimpor, Anda dapat menggunakan yang setara:

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

Sekali lagi, jika Anda membutuhkan distribusi lain, numpysediakan distribusi yang sama dengan python, dan juga banyak tambahan lainnya .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.