Простий спосіб створити матрицю випадкових чисел


97

Я намагаюся створити матрицю випадкових чисел, але моє рішення занадто довге і виглядає негарно

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

це виглядає нормально, але в моїй реалізації це так

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

що надзвичайно нечитабельно і не вміщується в одному рядку.

Відповіді:


75

Погляньте на numpy.random.rand :

Документація: rand (d0, d1, ..., dn)

Випадкові значення у заданій фігурі.

Створіть масив заданої фігури та розподіліть його випадковими зразками з рівномірного розподілу по [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

Ви можете залишити range(len()):

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

Але насправді, вам, мабуть, слід використовувати 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]])

як отримати випадкові вставки?
Джек Твен,

41
numpy.random.random_integers(low, high, shape), напр.numpy.random.random_integers(0, 100, (3, 3))
Павло Аноссов

Який термін для позначення у подвійних дужках використовується в підписі випадкового? Я з цим не знайомий.
Еміль Віктор

@EmileVictor, numpy.random.randomяк і багато інших numpy.randomметодів, приймає фігури, тобто N-кортежі. Отже, насправді зовнішні парантези представляють виклик методу numpy.random.random(), а внутрішні - синтаксичний цукор для створення екземпляра кортежу, (3, 3)який передається у функцію.
Vivek Jha

2
numpy.random.random_integers()застаріло. Використовуйте numpy.random.randint()замість цього. docs.scipy.org/doc/numpy/reference/generated/…
Макс.

15

використовувати np.random.randint()як numpy.random.random_integers()застаріле

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

5

Схоже, ви виконуєте Python вправу нейронної мережі машинного навчання Coursera. Ось що я зробив для 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

Спочатку створіть numpyмасив, а потім перетворіть його в matrix. Дивіться код нижче:

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

Коли ви говорите "матриця випадкових чисел", ви можете використовувати numpy як Павел https://stackoverflow.com/a/15451997/6169225, згаданий вище, у цьому випадку я припускаю, що для вас не має значення, який це розподіл (псевдо ) випадкові числа дотримуються.

Однак, якщо вам потрібен певний розподіл (я думаю, ви зацікавлені у рівномірному розподілі), numpy.random є для вас дуже корисні методи. Наприклад, припустимо, ви хочете матрицю 3x2 з псевдо випадковим рівномірним розподілом, обмеженим [низьким, високим]. Ви можете зробити це так:

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

Зверніть увагу, ви можете замінити uniform будь-яку кількість розподілів, що підтримуються цією бібліотекою.

Подальше читання: https://docs.scipy.org/doc/numpy/reference/routines.random.html


2

Простий спосіб створення масиву випадкових цілих чисел:

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

Далі виводиться матриця 2 на 3 випадкових цілих чисел від 0 до 10:

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

2

Для створення масиву випадкових чисел NumPy забезпечує створення масиву за допомогою:

  1. Реальні числа

  2. Цілі особи

Для створення масиву за допомогою випадкових дійсних чисел: є 2 варіанти

  1. random.rand (для рівномірного розподілу сформованих випадкових чисел)
  2. random.randn (для нормального розподілу сформованих випадкових чисел)

випадковий.ранд

import numpy as np 
arr = np.random.rand(row_size, column_size) 

випадковий.randn

import numpy as np 
arr = np.random.randn(row_size, column_size) 

Для створення масиву з використанням випадкових цілих чисел:

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

де

  • низький = найменше (підписане) ціле число, що витягується з розподілу
  • високий (необов’язково) = Якщо передбачено, одне над найбільшим (підписаним) цілим числом, яке буде витягнуто з розподілу
  • розмір (необов’язково) = Вихідна фігура, тобто якщо дана фігура є, наприклад, (m, n, k), то малюються зразки m * n * k
  • dtype (необов’язково) = бажаний dtype результату.

наприклад:

Наведений приклад створить масив випадкових цілих чисел від 0 до 4, його розмір буде 5 * 5 і матиме 25 цілих чисел

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

для того, щоб створити матрицю 5 на 5, її слід змінити на

arr2 = np.random.randint (0,5, size = (5,5)), змініть символ множення * на кому, #

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

наприклад2:

Наведений приклад створить масив випадкових цілих чисел від 0 до 1, його розмір буде 1 * 10 і матиме 10 цілих чисел

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

Відповідь із використанням 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 (рядок, стовпець) генерує випадкові числа від 0 до 1 відповідно до заданих (m, n) параметрів. Тож використовуйте його, щоб створити (m, n) матрицю і помножити матрицю для межі діапазону та підсумувати її з верхньою межею.

Аналіз: Якщо генерується нуль, буде дотримано лише нижній ліміт, але якщо генерується один, буде дотриманий лише верхній ліміт. По порядку, генеруючи обмеження за допомогою rand numpy, ви можете генерувати крайні бажані числа.

import numpy as np

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

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

Вихід:

a = array([[5.91580065, 8.1117106 ],
          [6.30986984, 5.720437  ]])
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.