Bir şamandıra aralığı arasında rastgele bir sayı nasıl alınır?


414

randrange(start, stop)yalnızca tamsayı bağımsız değişkenleri alır. Peki iki şamandıra değeri arasında nasıl rastgele bir sayı elde edebilirim?


2
Numpy istiyorsanız np.random.uniform(start, stop)veya np.random.uniform(start, stop, samples)birden fazla örnek istiyorsanız. Aksi takdirde aşağıdaki cevaplar en iyisidir.
sachinruk

Yanıtlar:


650

Rastgele kullanın. Üniforma (a, b) :

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

4
teorik olarak 1.5 ve 1.9 üretebilir mi? ya da sadece 1.50 ~ 1 ve 1.89 ~ üretir mi?
Musixauce3000

14
@ Musixauce3000 Kısa Cevap: Evet. Daha uzun cevap: Belgelere bakarsanız, Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < abaşka bir deyişle çıktı Nhem giriş ahem de b. Bu durumda 1.5ve 1.9.
Dan

Bunu .uniformişlevi kullanmadan yapmanın başka bir yolu var mı , bunun yerine ya .randomda randrange?
DerryckDX

1
@DerryckDX 1.5 + random.random() * (1.9 - 1.5)bunu yapmalı, teknik özelliklere göre bu asla tam olarak geri dönmeyecektir 1.9(teoride bile).
Yonatan N

Musixauce3000 @ bu görünüyor uniform(a, b)olarak uygulanır a + (b-a) * random()ve döner yuvarlama bağlı aralık [a, b) ya da [a, b] rastgele bir sayı github.com/python/cpython/blob/...
Pavel

74

random.uniform(a, b)aradığınız şey gibi görünüyor. Dokümanlardan:

<= B için <= N <= b ve b <a için b <= N <= a olacak şekilde rastgele bir kayan nokta sayısı N döndürün.

Buraya bakın .


47

noktanın sağında N rakamı olan rastgele bir şamandıra oluşturmak istiyorsanız, bunu yapabilirsiniz:

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

ikinci argüman ondalık sayıdır.


Bunun neden daha fazla oyu olmadığını bilmiyorum, diğerlerinin yuvarlama mekanizması yoktu.
TheTechRobo36414519

2

En yaygın olarak şunları kullanırsınız:

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

Gerekirse Python diğer dağıtımları sağlar .

Eğer varsa numpyzaten ithal, onun eşdeğeri kullanılır edebilirsiniz:

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

Yine, başka bir dağıtıma ihtiyacınız varsa numpy, birçok ek dağıtımın yanı sıra python ile aynı dağıtımları sağlar .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.