python - repetir - Generar una matriz aleatoria de flotadores entre un rango
lista de numeros aleatorios en python (6)
¿Por qué no combinar random.uniform con una lista de comprensión?
>>> def random_floats(low, high, size):
... return [random.uniform(low, high) for _ in xrange(size)]
...
>>> random_floats(0.5, 2.8, 5)
[2.366910411506704, 1.878800401620107, 1.0145196974227986, 2.332600336488709, 1.945869474662082]
Esta podría ser una pregunta tonta, pero no he podido encontrar una función para generar una serie de flotantes aleatorios de una determinada longitud entre un cierto rango.
Miré muestreo aleatorio pero ninguna función parece hacer lo que necesito.
random.uniform se acerca pero solo devuelve un elemento único, no un número específico.
Esto es lo que estoy buscando:
ran_floats = some_function(low=0.5, high=13.3, size=50)
que devolvería una matriz de 50
flotantes aleatorios no únicos (es decir, se permiten las repeticiones) distribuidos uniformemente en el rango [0.5, 13.3]
.
¿Hay tal función?
¿Por qué no usar una lista de comprensión?
ran_floats = [random.uniform(low,high) for _ in xrange(size)]
El bucle for en la lista de comprensión lleva tiempo y lo hace lento. Es mejor usar parámetros numpy (bajo, alto, tamaño, etc.etc)
import numpy as np
import time
rang = 10000
tic = time.time()
for i in range(rang):
sampl = np.random.uniform(low=0, high=2, size=(182))
print("it took: ", time.time() - tic)
tic = time.time()
for i in range(rang):
ran_floats = [np.random.uniform(0,2) for _ in range(182)]
print("it took: ", time.time() - tic)
muestra de salida:
(''se necesitó:'', 0.06406784057617188)
(''se necesitó:'', 1.7253198623657227)
Esta es la forma más simple
np.random.uniform(start,stop,(rows,columns))
Puede que ya exista una función para hacer lo que está buscando, pero no sé (¿todavía?). Mientras tanto, te sugiero que uses:
ran_floats = numpy.random.rand(50) * (13.3-0.5) + 0.5
Esto producirá una matriz de forma (50) con una distribución uniforme entre 0.5 y 13.3.
También puedes definir una función:
def random_uniform_range(shape=[1,],low=0,high=1):
"""
Random uniform range
Produces a random uniform distribution of specified shape, with arbitrary max and
min values. Default shape is [1], and default range is [0,1].
"""
return numpy.random.rand(shape) * (high - min) + min
EDITAR : Hmm, sí, así que me lo perdí, hay numpy.random.uniform () con la misma llamada exacta que desea! Pruebe import numpy; help(numpy.random.uniform)
import numpy; help(numpy.random.uniform)
para más información.
np.random.uniform
ajusta a su caso de uso: http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html
sampl = np.random.uniform(low=0.5, high=13.3, size=(50,))