Случайно нормально распределенная матрица в numpy - PullRequest
0 голосов
/ 22 мая 2018

Я хотел бы сгенерировать матрицу M, элементы которой M (i, j) взяты из стандартного нормального распределения.Один из тривиальных способов сделать это -

import numpy as np

A = [ [np.random.normal() for i in range(3)]    for j in range(3) ]
A = np.array(A)
print(A)

[[-0.12409887  0.86569787 -1.62461893]
 [ 0.30234536  0.47554092 -1.41780764]
 [ 0.44443707 -0.76518672 -1.40276347]]

Но я играл с numpy и наткнулся на другое «решение»:

import numpy as np
import numpy.matlib as npm

A = np.random.normal(npm.zeros((3, 3)), npm.ones((3, 3)))
print(A)

[[ 1.36542538 -0.40676747  0.51832243]
 [ 1.94915748 -0.86427391 -0.47288974]
 [ 1.9303462  -1.26666448 -0.50629403]]

Я прочитал документ для numpy.random.normal, и он говорит, что не проясняет, как эта функция работает, когда передается матрица вместо одного значения.Я подозревал, что во втором «решении» я мог бы использовать многомерное нормальное распределение.Но это не может быть правдой, поскольку входные аргументы имеют одинаковые размеры (ковариация должна быть матрицей, а среднее - вектором).Не уверен, что генерируется вторым кодом.

1 Ответ

0 голосов
/ 22 мая 2018

Намеченный способ сделать то, что вы хотите, это

A = np.random.normal(0, 1, (3, 3))

Это необязательный параметр size, который сообщает numpy, какую фигуру вы хотите вернуть (в данном случае 3 на 3).

Ваш второй способ также работает, потому что документация гласит

Если размер равен None (по умолчанию), возвращается одно значение, если loc и scale оба являются скалярами.В противном случае создаются образцы np.broadcast (loc, scale) .size.

Таким образом, нет многомерного распределения и нет корреляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...