una repetir posiciones numeros nombres matriz llenar lista letras generar con como azar aleatorios aleatorias python arrays random numpy

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.