Cách đơn giản để tạo ma trận các số ngẫu nhiên


97

Tôi đang cố gắng tạo ma trận các số ngẫu nhiên, nhưng giải pháp của tôi quá dài và trông xấu xí

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

cái này có vẻ ổn, nhưng trong cách triển khai của tôi thì

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

cực kỳ khó đọc và không nằm trên một dòng.

Câu trả lời:


75

Hãy xem numpy.random.rand :

Chuỗi tài liệu: rand (d0, d1, ..., dn)

Giá trị ngẫu nhiên trong một hình dạng cho trước.

Tạo một mảng của hình dạng đã cho và truyền nó với các mẫu ngẫu nhiên từ một phân bố đồng đều [0, 1).


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

95

Bạn có thể bỏ range(len()):

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

Nhưng thực sự, bạn có lẽ nên sử dụng 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]])

làm thế nào để nhận được int ngẫu nhiên?
Jack Twain

41
numpy.random.random_integers(low, high, shape), ví dụnumpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov,

Thuật ngữ cho ký hiệu dấu ngoặc kép đang được sử dụng trong chữ ký ngẫu nhiên là gì? Tôi không quen với nó.
Emile Victor

@EmileVictor numpy.random.randomgiống như nhiều numpy.randomphương thức khác chấp nhận hình dạng, tức là N-tuples. Vì vậy, thực sự các tham số bên ngoài đại diện cho việc gọi phương thức numpy.random.random()và các tham số bên trong là đường cú pháp để khởi tạo bộ tuple (3, 3)được truyền vào hàm.
Vivek Jha

2
numpy.random.random_integers()không được dùng nữa. Sử dụng numpy.random.randint()thay thế. docs.scipy.org/doc/numpy/reference/generated/…
Tối đa

15

sử dụng np.random.randint()như numpy.random.random_integers()không được dùng nữa

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

5

Có vẻ như bạn đang thực hiện triển khai Python của bài tập Mạng thần kinh học máy Coursera. Đây là những gì tôi đã làm cho 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

3

Đầu tiên, tạo numpymảng sau đó chuyển đổi nó thành matrix. Xem mã bên dưới:

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)

2
x = np.int_(np.random.rand(10) * 10)

Đối với các số ngẫu nhiên trong số 10. Với 20, chúng ta phải nhân với 20.


2

Khi bạn nói "ma trận các số ngẫu nhiên", bạn có thể sử dụng numpy như Pavel https://stackoverflow.com/a/15451997/6169225 đã đề cập ở trên, trong trường hợp này, tôi giả định rằng đối với bạn phân phối này không liên quan gì (giả ) số ngẫu nhiên tuân theo.

Tuy nhiên, nếu bạn yêu cầu một phân phối cụ thể (tôi tưởng tượng bạn quan tâm đến phân phối đồng đều), numpy.randomcó những phương pháp rất hữu ích cho bạn. Ví dụ: giả sử bạn muốn một ma trận 3x2 có phân phối đồng nhất ngẫu nhiên giả giới hạn bởi [thấp, cao]. Bạn có thể làm như vậy:

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

Lưu ý, bạn có thể thay thế uniformbằng bất kỳ số lượng bản phân phối nào được thư viện này hỗ trợ.

Đọc thêm: https://docs.scipy.org/doc/numpy/reference/routines.random.html


2

Một cách đơn giản để tạo một mảng các số nguyên ngẫu nhiên là:

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

Kết quả sau đây xuất ra ma trận 2 x 3 gồm các số nguyên ngẫu nhiên từ 0 đến 10:

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

2

Để tạo một mảng số ngẫu nhiên, NumPy cung cấp tính năng tạo mảng bằng cách sử dụng:

  1. Số thực

  2. Số nguyên

Để tạo mảng bằng số Thực ngẫu nhiên : có 2 tùy chọn

  1. random.rand (để phân phối đồng đều các số ngẫu nhiên được tạo)
  2. random.randn (cho phân phối chuẩn của các số ngẫu nhiên được tạo)

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) 

Để tạo mảng bằng số nguyên ngẫu nhiên :

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

Ở đâu

  • low = Số nguyên thấp nhất (có dấu) được rút ra từ phân phối
  • high (tùy chọn) = Nếu được cung cấp, một bên trên số nguyên lớn nhất (có dấu) sẽ được rút ra từ phân phối
  • size (tùy chọn) = Hình dạng đầu ra, tức là nếu hình dạng đã cho là, ví dụ, (m, n, k), thì m * n * k mẫu được vẽ
  • dtype (tùy chọn) = Loại kết quả mong muốn.

ví dụ:

Ví dụ đã cho sẽ tạo ra một mảng các số nguyên ngẫu nhiên từ 0 đến 4, kích thước của nó sẽ là 5 * 5 và có 25 số nguyên

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

để tạo ma trận 5 x 5, nó phải được sửa đổi thành

arr2 = np.random.randint (0,5, size = (5,5)), thay đổi ký hiệu phép nhân * thành dấu phẩy, #

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

vd2:

Ví dụ đã cho sẽ tạo ra một mảng các số nguyên ngẫu nhiên từ 0 đến 1, kích thước của nó sẽ là 1 * 10 và sẽ có 10 số nguyên

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

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


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

Một câu trả lời bằng cách sử dụng map-Reduce: -

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))

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

0

numpy.random.rand (hàng, cột) tạo các số ngẫu nhiên từ 0 đến 1, theo các tham số (m, n) được chỉ định đã cho. Vì vậy, hãy sử dụng nó để tạo ma trận (m, n) và nhân ma trận với giới hạn phạm vi và tính tổng với giới hạn cao.

Phân tích: Nếu số 0 được tạo ra, chỉ giới hạn thấp sẽ được giữ, nhưng nếu một giới hạn được tạo ra chỉ giới hạn cao sẽ được giữ lại. Theo thứ tự, tạo các giới hạn bằng cách sử dụng rand numpy, bạn có thể tạo ra các số cực kỳ mong muốn.

import numpy as np

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

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

Đầu ra:

a = array([[5.91580065, 8.1117106 ],
          [6.30986984, 5.720437  ]])
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.