Rastgele sayılardan oluşan matris oluşturmanın basit yolu


98

Rastgele sayılardan oluşan bir matris oluşturmaya çalışıyorum ama çözümüm çok uzun ve çirkin görünüyor

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

bu iyi görünüyor, ancak benim uygulamamda

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

bu son derece okunamaz ve tek bir satıra sığmaz.

Yanıtlar:


76

Numpy.random.rand'a bir göz atın :

Doküman: rand (d0, d1, ..., dn)

Belirli bir şekildeki rastgele değerler.

Verilen şeklin bir dizisini oluşturun ve onu tekdüze bir dağılımdan rastgele örneklerle yayın [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

Şunları bırakabilirsiniz range(len()):

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

Ama gerçekten, muhtemelen numpy kullanmalısın.

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

rasgele girişler nasıl elde edilir?
Jack Twain

41
numpy.random.random_integers(low, high, shape), örneğinnumpy.random.random_integers(0, 100, (3, 3))
Pavel Anossov

Rastgele imzasında kullanılan çift parantez gösterimi için kullanılan terim nedir? Ben aşina değilim.
Emile Victor

@EmileVictor numpy.random.random, diğer birçok yöntem gibi numpy.randomşekilleri, yani N- tuples'i kabul eder. Yani gerçekte dış parantezler yöntemin çağrılmasını temsil eder numpy.random.random()ve iç parantezler (3, 3)işleve aktarılan demeti örneklemek için sözdizimsel şekerdir .
Vivek Jha

2
numpy.random.random_integers()kullanımdan kaldırıldı. numpy.random.randint()Bunun yerine kullanın . docs.scipy.org/doc/numpy/reference/generated/…
Maks.

15

kullanımdan kaldırıldığı np.random.randint()gibi kullannumpy.random.random_integers()

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

5

Görünüşe göre Coursera Machine Learning Neural Network alıştırmasının bir Python uygulaması yapıyorsunuz. İşte randInitializeWeights (L_in, L_out) için yaptığım şey

#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

Önce numpydizi oluşturun ve sonra onu dönüştürün matrix. Aşağıdaki koda bakın:

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)

10 üzerinden rastgele sayılar için 20 üzerinden 20 ile çarpmamız gerekir.


2

"Rasgele sayılardan oluşan bir matris" dediğinizde, yukarıda bahsettiğimiz Pavel https://stackoverflow.com/a/15451997/6169225 gibi numpy kullanabilirsiniz , bu durumda bunların hangi dağılımla ilgisiz olduğunu varsayıyorum (sözde ) rastgele sayılara uyulur.

Bununla birlikte, belirli bir dağıtıma ihtiyacınız varsa (tek tip dağıtımla ilgilendiğinizi tahmin ediyorum), numpy.randomsizin için çok yararlı yöntemlere sahiptir. Örneğin, [düşük, yüksek] ile sınırlanmış sözde rasgele tek tip dağılımı olan 3x2'lik bir matris istediğinizi varsayalım. Bunu şu şekilde yapabilirsiniz:

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

Not, uniformbu kitaplık tarafından desteklenen herhangi bir sayıda dağıtım ile değiştirebilirsiniz .

Daha fazla okuma: https://docs.scipy.org/doc/numpy/reference/routines.random.html


2

Rasgele tamsayı dizisi oluşturmanın basit bir yolu şudur:

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

Aşağıdaki, 2'ye 3'lük bir rasgele tamsayı matrisi 0'dan 10'a çıktı verir:

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

2

NumPy rastgele sayı dizisi oluşturmak için aşağıdakileri kullanarak dizi oluşturmayı sağlar:

  1. Gerçek sayılar

  2. Tamsayılar

Rastgele gerçek sayılar kullanarak dizi oluşturmak için : 2 seçenek vardır

  1. random.rand (oluşturulan rastgele sayıların tekdüze dağılımı için)
  2. random.randn (üretilen rastgele sayıların normal dağılımı için)

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) 

Rastgele Tamsayılar kullanarak dizi oluşturmak için :

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

nerede

  • düşük = Dağıtımdan alınacak en düşük (işaretli) tam sayı
  • high (isteğe bağlı) = Sağlanmışsa, dağıtımdan çekilecek en büyük (işaretli) tamsayının üzerinde bir
  • size (isteğe bağlı) = Çıktı şekli, yani verilen şekil, örneğin (m, n, k) ise, o zaman m * n * k örnekleri çizilir
  • dtype (isteğe bağlı) = Sonuç için istenen dtype.

Örneğin:

Verilen örnek, 0 ile 4 arasında rastgele bir tamsayı dizisi oluşturacak, boyutu 5 * 5 olacak ve 25 tamsayıya sahip olacak

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

5'e 5 matris oluşturmak için, şu şekilde değiştirilmelidir:

arr2 = np.random.randint (0,5, size = (5,5)), çarpım sembolünü * virgülle değiştirin, #

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

Verilen örnek, 0 ile 1 arasında rastgele bir tamsayı dizisi oluşturacak, boyutu 1 * 10 olacak ve 10 tamsayıya sahip olacak

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

Harita azaltma kullanan bir cevap: -

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 (satır, sütun), verilen belirtilen (m, n) parametrelere göre 0 ile 1 arasında rastgele sayılar üretir. Bu nedenle, bir (m, n) matrisi oluşturmak için kullanın ve matrisi aralık sınırı için çarpın ve üst sınırla toplayın.

Analiz: Sıfır üretilirse, sadece alt limit tutulacaktır, ancak eğer bir tane üretilirse sadece yüksek limit tutulacaktır. Sırayla, rand numpy kullanarak limitler oluşturarak, çok istenen sayıları oluşturabilirsiniz.

import numpy as np

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

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

Çıktı:

a = array([[5.91580065, 8.1117106 ],
          [6.30986984, 5.720437  ]])
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.