Простой способ создать матрицу случайных чисел

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

который крайне нечитаем и не помещается в одну строку.

user2173836
источник

Ответы:

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))
Павел Аносов 09
Какой термин используется для обозначения двойных скобок в сигнатуре random? Я не знаком с этим.
Эмиль Виктор
@EmileVictor, numpy.random.randomкак и многие другие numpy.randomметоды, принимает формы, то есть N-кортежи. Таким образом, на самом деле внешние скобки представляют вызов метода numpy.random.random(), а внутренние скобки - это синтаксический сахар для создания экземпляра кортежа, (3, 3)который передается в функцию.
Вивек Джа
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>))
nk911
источник
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
x = np.int_(np.random.rand(10) * 10)

Для случайных чисел из 10. Для случайных чисел из 20 мы должны умножить на 20.

Раджат Субхра Бхоумик
источник
2

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

Однако, если вам требуется конкретный дистрибутив (я полагаю, вы заинтересованы в равномерном распределении), у вас numpy.randomесть очень полезные методы для вас. Например, предположим, что вам нужна матрица 3x2 с псевдослучайным равномерным распределением, ограниченным [low, high]. Сделать это можно так:

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. Целые числа

Для создания массива с помощью случайных чисел Real: есть 2 варианта

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

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) 

Для создания массива с использованием случайных целых чисел:

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

где

  • low = Наименьшее (знаковое) целое число, извлекаемое из распределения
  • high (необязательно) = Если предоставлено, на единицу выше наибольшего (знакового) целого числа, которое будет извлечено из распределения
  • size (необязательно) = Форма вывода, т.е. если заданная форма, например, (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]]

eg2:

В данном примере будет создан массив случайных целых чисел от 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]
PythonUser
источник
1

Ответ с использованием map-reduce: -

map(lambda x: map(lambda y: ran(),range(len(inputs[0]))),range(hiden_neurons))
GodMan
источник
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 (row, column) генерирует случайные числа от 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  ]])
Hiago dos santos rabelo
источник