2013-03-16 4 views
34

Ich versuche, eine Matrix von Zufallszahlen zu erzeugen, aber meine Lösung ist zu lang und hässlich aussiehteinfache Art und Weise Matrix von Zufallszahlen zu erzeugen

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

das sieht ok, aber in meiner Implementierung ist es

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

das ist extrem unlesbar und passt nicht auf eine Zeile.

Antwort

68

können Sie fallen die range(len()):

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

Aber wirklich, sollten Sie wahrscheinlich numpy verwenden.

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]]) 
+0

wie bekomme ich zufällige ints? –

+19

'numpy.random.random_integers (niedrig, hoch, Form)', z.B. 'numpy.random.random_integers (0, 100, (3, 3))' –

+0

Wie lautet die Bezeichnung für die Doppelklammer, die bei der Signatur von Zufallszahlen verwendet wird? Ich bin damit nicht vertraut. –

14

Werfen Sie einen Blick auf numpy.random.rand:

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

Zufallswerte in einer bestimmten Form.

Erstellen Sie ein Array der angegebenen Form und propagieren Sie mit zufälligen Proben aus einer einheitlichen Verteilung über [0, 1).


>>> import numpy as np 
>>> np.random.rand(2,3) 
array([[ 0.22568268, 0.0053246 , 0.41282024], 
     [ 0.68824936, 0.68086462, 0.6854153 ]]) 
0

Eine Antwort unter Verwendung von Karten verringern: -

Karte (lambda x: Karte (lambda y: RAN(), Bereich (len (inputs [0]))), Bereich (hiden_neurons))

-1
random_matrix = [[random.random for j in range(collumns)] for i in range(rows) 
for i in range(rows): 
    print random_matrix[i] 
1

Sieht so aus, als ob Sie eine Python-Implementierung der Übung Coursera Machine Learning Neural Network durchführen. Hier ist, was ich tat, für 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 * .12 

#shift so that mean is at zero 
W = W - .12 
0
x = np.int_(np.random.rand(10) * 10) 

Für Zufallszahlen von 10. Denn von 20 wir von 20.

0

Verwendung np.random.randint multiplizieren() als numpy.random.random_integers() ist veraltet

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