Prosty sposób tworzenia macierzy liczb losowych

98

Próbuję utworzyć macierz liczb losowych, ale moje rozwiązanie jest za długie i wygląda brzydko

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

wygląda to dobrze, ale w mojej realizacji tak jest

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

który jest wyjątkowo nieczytelny i nie mieści się w jednej linii.

user2173836
źródło

Odpowiedzi:

76

Spójrz na numpy.random.rand :

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

Losowe wartości w zadanym kształcie.

Utwórz tablicę o podanym kształcie i propaguj ją za pomocą losowych próbek z jednolitego rozkładu [0, 1).


>>> import numpy as np
>>> np.random.rand(2,3)
array([[ 0.22568268,  0.0053246 ,  0.41282024],
       [ 0.68824936,  0.68086462,  0.6854153 ]])
korzeń
źródło
95

Możesz upuścić range(len()):

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

Ale tak naprawdę powinieneś prawdopodobnie użyć 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
źródło
jak zdobyć losowe ints?
Jack Twain,
41
numpy.random.random_integers(low, high, shape), np.numpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov
Jaki jest termin na zapis podwójnego nawiasu używany w podpisie losowym? Nie znam tego.
Emile Victor,
@EmileVictor, numpy.random.randompodobnie jak wiele innych numpy.randommetod, akceptuje kształty, tj. N-krotki. Tak więc w rzeczywistości zewnętrzne paranthezy reprezentują wywołanie metody numpy.random.random(), a wewnętrzne parantezy są cukrem syntaktycznym do tworzenia instancji krotki (3, 3)przekazywanej do funkcji.
Vivek Jha
2
numpy.random.random_integers()jest przestarzałe. Użyj numpy.random.randint()zamiast tego. docs.scipy.org/doc/numpy/reference/generated/ ...
maks.
15

użyj np.random.randint()jako numpy.random.random_integers()przestarzałe

random_matrix = numpy.random.randint(min_val,max_val,(<num_rows>,<num_cols>))
nk911
źródło
5

Wygląda na to, że wykonujesz w języku Python ćwiczenie Coursera Machine Learning Neural Network. Oto, co zrobiłem dla 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
Teatr Kartezjański
źródło
3

Najpierw utwórz numpytablicę, a następnie przekonwertuj ją na matrix. Zobacz poniższy kod:

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
źródło
2
x = np.int_(np.random.rand(10) * 10)

Dla liczb losowych z 10. Dla liczby z 20 musimy pomnożyć przez 20.

Rajat Subhra Bhowmick
źródło
2

Kiedy mówisz „macierz liczb losowych”, możesz użyć numpy jako wspomnianego wyżej Pawła https://stackoverflow.com/a/15451997/6169225 , w tym przypadku zakładam, że nie ma dla Ciebie znaczenia, jaka dystrybucja tych (pseudo ) losowe liczby.

Jeśli jednak potrzebujesz określonej dystrybucji (wyobrażam sobie, że interesuje Cię rozkład jednolity), numpy.randomma dla Ciebie bardzo przydatne metody. Na przykład, powiedzmy, że potrzebujesz macierzy 3x2 z pseudolosowym rozkładem jednorodnym ograniczonym przez [niski, wysoki]. Możesz to zrobić w następujący sposób:

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

Uwaga, możesz zastąpić uniformdowolną liczbą dystrybucji obsługiwanych przez tę bibliotekę.

Więcej informacji: https://docs.scipy.org/doc/numpy/reference/routines.random.html

Marquistador
źródło
2

Prosty sposób na utworzenie tablicy losowych liczb całkowitych to:

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

Poniższe polecenie daje macierz 2 na 3 losowych liczb całkowitych od 0 do 10:

a = np.random.randint(10, size=(2,3))
Biegacz
źródło
2

Aby utworzyć tablicę liczb losowych, NumPy zapewnia tworzenie tablic przy użyciu:

  1. Liczby rzeczywiste

  2. Liczby całkowite

Do tworzenia tablicy przy użyciu losowych liczb rzeczywistych: są 2 opcje

  1. random.rand (dla równomiernego rozmieszczenia generowanych liczb losowych)
  2. random.randn (dla normalnego rozkładu generowanych liczb losowych)

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) 

Aby utworzyć tablicę przy użyciu losowych liczb całkowitych:

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

gdzie

  • low = Najniższa (ze znakiem) liczba całkowita do pobrania z dystrybucji
  • high (opcjonalne) = Jeśli podano, jedna powyżej największej (ze znakiem) liczby całkowitej, która ma zostać pobrana z dystrybucji
  • size (opcjonalnie) = Kształt wyjściowy, tj. jeśli podany kształt to np. (m, n, k), to pobieranych jest m * n * k próbek
  • dtype (opcjonalne) = Żądany typ wyniku.

na przykład:

Podany przykład wygeneruje tablicę losowych liczb całkowitych od 0 do 4, jej rozmiar wyniesie 5 * 5 i będzie miał 25 liczb całkowitych

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

aby stworzyć macierz 5 na 5, należy ją zmodyfikować na

arr2 = np.random.randint (0,5, size = (5,5)), zmień symbol mnożenia * na przecinek, #

[[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]]

np. 2:

Podany przykład wygeneruje tablicę losowych liczb całkowitych od 0 do 1, jej rozmiar wyniesie 1 * 10 i będzie miał 10 liczb całkowitych

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

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

SUJITKUMAR SINGH
źródło
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
źródło
1

Odpowiedź za pomocą map-redukuj: -

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
GodMan
źródło
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
źródło
0

numpy.random.rand (rzad, kolumna) generuje liczby losowe od 0 do 1, zgodnie z podanymi parametrami (m, n). Więc użyj go do stworzenia macierzy (m, n) i pomnóż macierz dla granicy zakresu i zsumuj ją z górną granicą.

Analiza: Jeśli zostanie wygenerowane zero, tylko dolny limit zostanie utrzymany, ale jeśli zostanie wygenerowany, tylko górny limit zostanie utrzymany. W kolejności słów, generując limity za pomocą rand numpy, możesz wygenerować skrajne pożądane liczby.

import numpy as np

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

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

Wynik:

a = array([[5.91580065, 8.1117106 ],
          [6.30986984, 5.720437  ]])
Hiago dos santos rabelo
źródło