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.

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

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

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>))

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

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)

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

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


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


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))

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]


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

Jawaban menggunakan pengurangan peta: -

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 (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  ]])
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.