Manera simple de crear una matriz de números aleatorios

97

Estoy tratando de crear una matriz de números aleatorios, pero mi solución es demasiado larga y se ve fea

random_matrix = [[random.random() for e in range(2)] for e in range(3)]

esto se ve bien, pero en mi implementación es

weights_h = [[random.random() for e in range(len(inputs[0]))] for e in range(hiden_neurons)]

que es extremadamente ilegible y no cabe en una línea.

usuario2173836
fuente

Respuestas:

75

Eche un vistazo a numpy.random.rand :

Docstring: rand (d0, d1, ..., dn)

Valores aleatorios en una forma determinada.

Cree una matriz de la forma dada y propaguela con muestras aleatorias de una distribución uniforme [0, 1).


>>> import numpy as np
>>> np.random.rand(2,3)
array([[ 0.22568268,  0.0053246 ,  0.41282024],
       [ 0.68824936,  0.68086462,  0.6854153 ]])
raíz
fuente
95

Puede soltar el range(len()):

weights_h = [[random.random() for e in inputs[0]] for e in range(hiden_neurons)]

Pero realmente, probablemente deberías usar numpy.

In [9]: numpy.random.random((3, 3))
Out[9]:
array([[ 0.37052381,  0.03463207,  0.10669077],
       [ 0.05862909,  0.8515325 ,  0.79809676],
       [ 0.43203632,  0.54633635,  0.09076408]])
Pavel Anossov
fuente
¿Cómo obtener entradas al azar?
Jack Twain
41
numpy.random.random_integers(low, high, shape), por ejemplonumpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov
¿Cuál es el término para la notación de doble corchete que se usa en la firma de azar? No estoy familiarizado con eso.
Emile Victor
@EmileVictor, numpy.random.randomcomo muchos de los otros numpy.randommétodos, acepta formas, es decir, N-tuplas. Entonces, realmente, las paréntesis externas representan la llamada al método numpy.random.random(), y las paréntesis internas son azúcar sintáctico para instanciar la tupla (3, 3)que se pasa a la función.
Vivek Jha
2
numpy.random.random_integers()es obsoleto. Úselo en su numpy.random.randint()lugar. docs.scipy.org/doc/numpy/reference/generated/…
Max
15

usar np.random.randint()como numpy.random.random_integers()está en desuso

random_matrix = numpy.random.randint(min_val,max_val,(<num_rows>,<num_cols>))
nk911
fuente
5

Parece que está realizando una implementación en Python del ejercicio de la red neuronal de aprendizaje automático de Coursera. Esto es lo que hice para randInitializeWeights (L_in, L_out)

#get a random array of floats between 0 and 1 as Pavel mentioned 
W = numpy.random.random((L_out, L_in +1))

#normalize so that it spans a range of twice epsilon
W = W * 2 * epsilon

#shift so that mean is at zero
W = W - epsilon
Teatro cartesiano
fuente
3

Primero, cree una numpymatriz y luego conviértala en matrix. Vea el código a continuación:

import numpy

B = numpy.random.random((3, 4)) #its ndArray
C = numpy.matrix(B)# it is matrix
print(type(B))
print(type(C)) 
print(C)
Lokesh Sharma
fuente
2
x = np.int_(np.random.rand(10) * 10)

Para números aleatorios sobre 10. Para sobre 20, tenemos que multiplicar por 20.

Rajat Subhra Bhowmick
fuente
2

Cuando dices "una matriz de números aleatorios", puedes usar numpy como Pavel https://stackoverflow.com/a/15451997/6169225 mencionado anteriormente, en este caso, supongo que es irrelevante para usted qué distribución estos (pseudo ) se adhieren a los números aleatorios.

Sin embargo, si necesita una distribución en particular (imagino que le interesa la distribución uniforme), numpy.randomtiene métodos muy útiles para usted. Por ejemplo, supongamos que desea una matriz de 3x2 con una distribución uniforme pseudoaleatoria limitada por [bajo, alto]. Puedes hacer esto así:

numpy.random.uniform(low,high,(3,2))

Tenga en cuenta que puede reemplazar uniformpor cualquier número de distribuciones compatibles con esta biblioteca.

Más información: https://docs.scipy.org/doc/numpy/reference/routines.random.html

Marquistador
fuente
2

Una forma sencilla de crear una matriz de números enteros aleatorios es:

matrix = np.random.randint(maxVal, size=(rows, columns))

Lo siguiente genera una matriz de 2 por 3 de enteros aleatorios de 0 a 10:

a = np.random.randint(10, size=(2,3))
Corredor
fuente
2

Para crear una matriz de números aleatorios, NumPy proporciona la creación de una matriz usando:

  1. Numeros reales

  2. Enteros

Para crear una matriz usando números reales aleatorios : hay 2 opciones

  1. random.rand (para una distribución uniforme de los números aleatorios generados)
  2. random.randn (para la distribución normal de los números aleatorios generados)

random.rand

import numpy as np 
arr = np.random.rand(row_size, column_size) 

random.randn

import numpy as np 
arr = np.random.randn(row_size, column_size) 

Para crear una matriz usando enteros aleatorios :

import numpy as np
numpy.random.randint(low, high=None, size=None, dtype='l')

dónde

  • bajo = entero más bajo (con signo) que se extraerá de la distribución
  • alto (opcional) = Si se proporciona, uno por encima del entero más grande (con signo) que se extraerá de la distribución
  • tamaño (opcional) = forma de salida, es decir, si la forma dada es, por ejemplo, (m, n, k), entonces se extraen m * n * k muestras
  • dtype (opcional) = Dtype deseado del resultado.

p.ej:

El ejemplo dado producirá una matriz de enteros aleatorios entre 0 y 4, su tamaño será 5 * 5 y tendrá 25 enteros

arr2 = np.random.randint(0,5,size = (5,5))

para crear una matriz de 5 por 5, debe modificarse para

arr2 = np.random.randint (0,5, size = (5,5)), cambie el símbolo de multiplicación * a una coma, #

[[2 1 1 0 1] [3 2 1 4 3] [2 3 0 3 3] [1 3 1 0 0] [4 1 2 0 1]]

eg2:

El ejemplo dado producirá una matriz de enteros aleatorios entre 0 y 1, su tamaño será 1 * 10 y tendrá 10 enteros

arr3= np.random.randint(2, size = 10)

[0 0 0 0 1 1 0 0 1 1]

SUJITKUMAR SINGH
fuente
1
random_matrix = [[random.random for j in range(collumns)] for i in range(rows)
for i in range(rows):
    print random_matrix[i]
PythonUser
fuente
1

Una respuesta usando map-reduce: -

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
Dioshombre
fuente
0
#this is a function for a square matrix so on the while loop rows does not have to be less than cols.
#you can make your own condition. But if you want your a square matrix, use this code.

import random

import numpy as np

def random_matrix(R, cols):

        matrix = []

        rows =  0

        while  rows < cols:

            N = random.sample(R, cols)

            matrix.append(N)

            rows = rows + 1

    return np.array(matrix)

print(random_matrix(range(10), 5))
#make sure you understand the function random.sample
Lindokuhle Ngwenya
fuente
0

numpy.random.rand (fila, columna) genera números aleatorios entre 0 y 1, de acuerdo con los parámetros especificados (m, n) dados. Así que utilícelo para crear una matriz (m, n) y multiplique la matriz para el límite de rango y sume con el límite superior.

Analizando: Si se genera cero, solo se mantendrá el límite bajo, pero si se genera uno solo se mantendrá el límite alto. En otras palabras, generando los límites usando rand numpy puede generar los números extremos deseados.

import numpy as np

high = 10
low = 5
m,n = 2,2

a = (high - low)*np.random.rand(m,n) + low

Salida:

a = array([[5.91580065, 8.1117106 ],
          [6.30986984, 5.720437  ]])
Hiago dos santos rabelo
fuente