Python: массив выборок NxM из нормальных распределений NxM

У меня есть два 2D-массива (или более высокого измерения), один, который определяет средние (M) и один, который определяет стандартные отклонения (S). Существует ли библиотека Python (numpy, scipy,...?), Которая позволяет мне генерировать массив (X), содержащий образцы, взятые из соответствующих распределений?

Другими словами: каждая запись xij является выборкой, которая получается из нормального распределения, определенного соответствующим средним mij и стандартным отклонением sij.

1 ответ

Решение

Да numpy может помочь здесь:

E сть np.random.normal функция, принимающая входные данные в виде массива:

import numpy as np
means = np.arange(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
stddevs = np.ones(10) # [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

samples = np.random.normal(means, stddevs)
массив ([-1.69515214, -0.20680708,  0.61345775,  2.98154162,  2.77888087,
        7.22203785,  5.29995343,  8.52766436,  9.70005434,  9.58381479])

даже если они многомерны:

means = np.arange(10).reshape(2,5) # make it multidimensional with shape 2, 5
stddevs = np.ones(10).reshape(2,5)

samples = np.random.normal(means, stddevs)
массив ([[-0.76585438,  1.22226145,  2.85554809,  2.64009423,  4.67255324],
       [ 3.21658151,  4.59969355,  6.87946817,  9.14658687,  8.68465692]])

Второй имеет форму (2,5)


Если вам нужны только разные средние значения, но одно и то же стандартное отклонение, вы также можете передать только один массив и один скаляр и все же получить массив правильной формы:

means = np.arange(10)

samples = np.random.normal(means, 1)
массив ([ 0.54018686, -0.35737881,  2.08881115,  3.08742942,  4.4426366,
        3.6694955,  5.27515536,  8.68300816,  8.83893819,  7.71284217])
Другие вопросы по тегам