Cara sederhana untuk membuat matriks bilangan acak

97

Saya mencoba membuat matriks angka acak, tetapi solusi saya terlalu panjang dan terlihat jelek

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

ini terlihat oke, tetapi dalam implementasi saya itu

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

yang sangat tidak terbaca dan tidak muat dalam satu baris.

pengguna2173836
sumber

Jawaban:

75

Lihat numpy.random.rand :

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

Nilai acak dalam bentuk tertentu.

Buat larik dari bentuk yang diberikan dan perbanyak dengan sampel acak dari distribusi seragam [0, 1).


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

Anda dapat menjatuhkan range(len()):

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

Tapi sungguh, Anda mungkin harus menggunakan 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
sumber
bagaimana cara mendapatkan int acak?
Jack Twain
41
numpy.random.random_integers(low, high, shape), misalnyanumpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov
Apa istilah untuk notasi braket ganda yang digunakan dalam tanda tangan random? Saya tidak terbiasa dengan itu.
Emile Victor
@EmileVictor numpy.random.randomseperti banyak numpy.randommetode lainnya menerima bentuk, yaitu N-tupel. Jadi benar-benar tanda kurung luar mewakili pemanggilan metode numpy.random.random(), dan tanda kurung di dalam adalah gula sintaksis untuk membuat contoh tupel (3, 3)yang diteruskan ke dalam fungsi.
Vivek Jha
2
numpy.random.random_integers()sudah ditinggalkan. Gunakan numpy.random.randint()sebagai gantinya. docs.scipy.org/doc/numpy/reference/generated/…
Maks.
15

gunakan np.random.randint()seperti yang numpy.random.random_integers()sudah tidak digunakan lagi

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

Sepertinya Anda melakukan implementasi Python dari latihan Jaringan Neural Pembelajaran Mesin Coursera. Inilah yang saya lakukan untuk 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
Teater Cartesian
sumber
3

Pertama buat numpyarray lalu ubah menjadi matrix. Lihat kode di bawah ini:

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
sumber
2
x = np.int_(np.random.rand(10) * 10)

Untuk bilangan acak dari 10. Untuk dari 20 kita harus mengalikan dengan 20.

Rajat Subhra Bhowmick
sumber
2

Ketika Anda mengatakan "matriks bilangan acak", Anda dapat menggunakan numpy sebagai Pavel https://stackoverflow.com/a/15451997/6169225 yang disebutkan di atas, dalam hal ini saya berasumsi kepada Anda bahwa tidak relevan apa distribusinya (pseudo ) nomor acak.

Namun, jika Anda memerlukan distribusi tertentu (saya membayangkan Anda tertarik pada distribusi seragam), numpy.randommetode yang sangat berguna untuk Anda. Misalnya, Anda menginginkan matriks 3x2 dengan distribusi seragam acak semu yang dibatasi oleh [rendah, tinggi]. Anda dapat melakukan ini seperti ini:

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

Catatan, Anda bisa mengganti uniformdengan sejumlah distribusi yang didukung oleh pustaka ini.

Bacaan lebih lanjut: https://docs.scipy.org/doc/numpy/reference/routines.random.html

Marquistador
sumber
2

Cara sederhana untuk membuat array bilangan bulat acak adalah:

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

Berikut adalah keluaran matriks bilangan bulat acak 2 kali 3 dari 0 hingga 10:

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

Untuk membuat larik bilangan acak, NumPy menyediakan pembuatan larik menggunakan:

  1. Bilangan real

  2. Bilangan bulat

Untuk membuat array menggunakan bilangan real acak : ada 2 pilihan

  1. random.rand (untuk distribusi seragam dari nomor acak yang dihasilkan)
  2. random.randn (untuk distribusi normal dari bilangan acak yang dihasilkan)

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) 

Untuk membuat array menggunakan bilangan bulat acak :

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

dimana

  • low = Integer terendah (bertanda tangan) yang akan diambil dari distribusi
  • tinggi (opsional) = Jika disediakan, satu di atas bilangan bulat terbesar (bertanda tangan) yang akan diambil dari distribusi
  • size (opsional) = Bentuk keluaran yaitu jika bentuk yang diberikan adalah, misalnya, (m, n, k), maka sampel m * n * k diambil
  • dtype (opsional) = dtype yang diinginkan dari hasil.

misalnya:

Contoh yang diberikan akan menghasilkan array bilangan bulat acak antara 0 dan 4, ukurannya akan menjadi 5 * 5 dan memiliki 25 bilangan bulat

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

untuk membuat matriks 5 x 5, harus dimodifikasi menjadi

arr2 = np.random.randint (0,5, size = (5,5)), ubah simbol perkalian * menjadi koma, #

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

Contoh yang diberikan akan menghasilkan array bilangan bulat acak antara 0 dan 1, ukurannya akan menjadi 1 * 10 dan akan memiliki 10 bilangan bulat

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

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

SUJITKUMAR SINGH
sumber
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
sumber
1

Jawaban menggunakan pengurangan peta: -

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
GodMan
sumber
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
sumber
0

numpy.random.rand (baris, kolom) menghasilkan angka acak antara 0 dan 1, sesuai dengan parameter yang ditentukan (m, n) yang diberikan. Jadi gunakan untuk membuat matriks (m, n) dan kalikan matriks untuk batas jangkauan dan jumlahkan dengan batas tertinggi.

Menganalisis: Jika nol dihasilkan, hanya batas bawah yang akan ditahan, tetapi jika dibuat, hanya batas tinggi yang akan dipertahankan. Dengan kata lain, menghasilkan batas menggunakan rand numpy Anda dapat menghasilkan angka ekstrim yang diinginkan.

import numpy as np

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

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

Keluaran:

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