Como obter um número aleatório entre um intervalo de flutuação?


414

randrange(start, stop)leva apenas argumentos inteiros. Então, como eu obteria um número aleatório entre dois valores flutuantes?


2
Se você quisesse entorpecer, é isso np.random.uniform(start, stop)ou np.random.uniform(start, stop, samples)se você queria várias amostras. Caso contrário, as respostas abaixo são as melhores.
precisa saber é o seguinte

Respostas:


650

Use random.uniform (a, b) :

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

4
teoricamente isso poderia produzir 1,5 e 1,9? ou produziria apenas 1,50 ~ 1 e 1,89 ~?
Musixauce3000

14
@ Musixauce3000 Resposta curta: Sim. Resposta mais longa: se você olhar para a documentação, ela indica Returns a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < aEm outras palavras, a saída Npode ser igual a entrada ae b. Nesse caso 1.5e 1.9.
Daniel

Existe outra maneira de fazer isso sem usar a .uniformfunção, mas usando .randomou randrange?
DerryckDX 27/03/19

1
O @DerryckDX 1.5 + random.random() * (1.9 - 1.5)deve fazê-lo, embora de acordo com as especificações isso nunca retorne exatamente 1.9(mesmo em teoria).
Yonatan N

@ Musixauce3000 parece que uniform(a, b)é implementado a + (b-a) * random()e retorna um número aleatório no intervalo [a, b) ou [a, b] dependendo do arredondamento github.com/python/cpython/blob/…
Pavel

74

random.uniform(a, b)parece ser o que você está procurando. Dos documentos:

Retorne um número de ponto flutuante aleatório N tal que a <= N <= b para a <= be b <= N <= a para b <a.

Veja aqui .


47

se você deseja gerar uma flutuação aleatória com N dígitos à direita do ponto, você pode fazer isso:

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

o segundo argumento é o número de casas decimais.


Não sei por que isso não tem mais votos positivos, os outros não tinham o mecanismo de arredondamento.
TheTechRobo36414519

2

Geralmente, você usaria:

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

Python fornece outras distribuições, se você precisar.

Se você tem numpy importou, poderá usar seu equivalente:

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

Novamente, se você precisar de outra distribuição, numpyforneça as mesmas distribuições que o python, além de muitas outras .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.