J'essaie de créer une matrice de nombres aléatoires, mais ma solution est trop longue et a l'air laide.
random_matrix = [[random.random() for e in range(2)] for e in range(3)]
cela semble correct, mais dans ma mise en œuvre, il est
weights_h = [[random.random() for e in range(len(inputs[0]))] for e in range(hiden_neurons)]
ce qui est extrêmement illisible et ne tient pas sur une ligne.
Jetez un oeil à numpy.random.Rand :
Chaîne de documentation: Rand (d0, d1, ..., dn)
Valeurs aléatoires dans une forme donnée.
Crée un tableau de la forme donnée et le propage avec des échantillons aléatoires d'une distribution uniforme sur
[0, 1)
.
>>> import numpy as np
>>> np.random.Rand(2,3)
array([[ 0.22568268, 0.0053246 , 0.41282024],
[ 0.68824936, 0.68086462, 0.6854153 ]])
Vous pouvez déposer le range(len())
:
weights_h = [[random.random() for e in inputs[0]] for e in range(hiden_neurons)]
Mais en réalité, vous devriez probablement utiliser 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]])
use np.random.randint () comme numpy.random.random_integers () est obsolète
random_matrix = numpy.random.randint(min_val,max_val,(<num_rows>,<num_cols>))
On dirait que vous effectuez une Python implémentation de l'exercice Réseau de neurones Learning Learning de Coursera. Voici ce que j'ai fait pour 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
Commencez par créer le tableau numpy
, puis convertissez-le en matrix
. Voir le code ci-dessous:
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)
Lorsque vous dites "une matrice de nombres aléatoires", vous pouvez utiliser numpy comme Pavel https://stackoverflow.com/a/15451997/6169225 mentionné ci-dessus , dans ce cas, je suppose que la distribution de ces nombres (pseudo) aléatoires est sans importance.
Toutefois, si vous souhaitez une distribution particulière (j'imagine que la distribution uniforme vous intéresse), numpy.random
a des méthodes très utiles pour vous. Par exemple, supposons que vous souhaitiez une matrice 3x2 avec une distribution uniforme pseudo-aléatoire limitée par [bas, haut]. Vous pouvez faire ça comme ça:
numpy.random.uniform(low,high,(3,2))
Notez que vous pouvez remplacer uniform
par un nombre quelconque de distributions prises en charge par cette bibliothèque.
Pour en savoir plus: https://docs.scipy.org/doc/numpy/reference/routines.random.html
Un moyen simple de créer un tableau d'entiers aléatoires est:
matrix = np.random.randint(maxVal, size=(rows, columns))
Ce qui suit génère une matrice 2 sur 3 d’entiers aléatoires de 0 à 10:
a = np.random.randint(10, size=(2,3))
x = np.int_(np.random.Rand(10) * 10)
Pour des nombres aléatoires sur 10. Pour 20, nous devons multiplier par 20.
Une réponse en utilisant map-réduire: -
map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
random_matrix = [[random.random for j in range(collumns)] for i in range(rows)
for i in range(rows):
print random_matrix[i]
#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