Генерация нормализованной матрицы случайных чисел, строки которых генерируются из разных гауссовых (нормальных) распределений - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь написать генератор на python, который генерирует N * M матрицу случайных чисел, используя гауссово (нормальное) распределение.

дано N и M и число гауссовских случайных полей (нормальное распределение). Числа в матрице также должны быть от 0 до 1. Например, 100 * 80 матрица чисел с плавающей точкой между 0 и 1, которые генерируются из 5 различных гауссовых распределений. Среднее и дисперсия этих распределений могут быть выбраны произвольно. Также произвольно, какие и сколько строк генерируются при каком распределении. Важно то, что числа в строке генерируются в одном и том же нормальном распределении. (Вернее, каждая строка - это точка, которая существует в определенном многомерном распределении Гаусса)

Я уже пробовал scipy.stats.truncnorm. Здесь я не знаю, как генерировать строки по разному распределению, а num.random.multivariate_normal слишком сложен для понимания. Я долго искал и не могу найти ни хорошей возможности передать ограничение с числами от 0 до 1, ни найти способ генерирования чисел из разных нормальных распределений.

1 Ответ

0 голосов
/ 11 января 2019

Учитывая, что у вас уже есть sigma и mu (указывает, какая строка будет использовать какой дистрибутив):

sigma = np.array((1, 2, 3))
mu = np.array((-1, -2, -3))

Просто создайте получившийся дистрибутив (3 строки / различные распределения, 10 столбцов здесь):

samples = np.random.standard_normal((3, 10)) * sigma[:, None] + mu[:, None]

Имейте в виду, что распределение Гаусса не ограничено, поэтому вы должны обрезать:

samples = np.clip(samples, 0, 1)

Конечно, в зависимости от значений sigma и mu вы не получите гауссово распределение ваших значений.

...